File dicebox.py changed (mode: 100644) (index a55f6d7..30d74d7) |
... |
... |
class Chrt(DiceBox): |
381 |
381 |
|
|
382 |
382 |
#č vyhodil jsem simplex_id'y |
#č vyhodil jsem simplex_id'y |
383 |
383 |
bx.simplex_events = bx.get_events() |
bx.simplex_events = bx.get_events() |
|
384 |
|
#č ty množiny jsou tak trošku overkill, ale budiž |
|
385 |
|
bx.simplices_set = set() |
384 |
386 |
for simplex in bx.tri.simplices: |
for simplex in bx.tri.simplices: |
385 |
387 |
# zde jen počítame |
# zde jen počítame |
386 |
388 |
bx.estimate_simplex(simplex) |
bx.estimate_simplex(simplex) |
|
... |
... |
class Chrt(DiceBox): |
397 |
399 |
|
|
398 |
400 |
|
|
399 |
401 |
|
|
400 |
|
|
|
|
402 |
|
#č beží 99% času |
401 |
403 |
def increment(bx, input_sample): |
def increment(bx, input_sample): |
402 |
404 |
#ё ну нахрен это ваше наследование-расследование |
#ё ну нахрен это ваше наследование-расследование |
403 |
405 |
|
|
|
... |
... |
class Chrt(DiceBox): |
425 |
427 |
|
|
426 |
428 |
|
|
427 |
429 |
|
|
428 |
|
|
|
|
430 |
|
#č tato funkce běží 91% času |
|
431 |
|
# bottleneck function |
429 |
432 |
def _handle_changed_triangulation(bx, input_sample): |
def _handle_changed_triangulation(bx, input_sample): |
430 |
433 |
""" |
""" |
431 |
434 |
Triangulace zajistěně existuje |
Triangulace zajistěně existuje |
|
... |
... |
class Chrt(DiceBox): |
446 |
449 |
# předpokladám, že se počet simplexů přidaním bodů nezměnší |
# předpokladám, že se počet simplexů přidaním bodů nezměnší |
447 |
450 |
equal_mask = former_simplices == bx.tri.simplices[:len(former_simplices)] |
equal_mask = former_simplices == bx.tri.simplices[:len(former_simplices)] |
448 |
451 |
|
|
|
452 |
|
|
|
453 |
|
#č zde spolehám na to, že pořadí indexů se nikdy nezmění |
|
454 |
|
#č (dá se něco takovýho očekavát podle toho co jsem čet v dokumentaci) |
|
455 |
|
|
449 |
456 |
#č u těch přečíslovaných zkolntrolujeme, zda fakt v té triangulaci nejsou |
#č u těch přečíslovaných zkolntrolujeme, zda fakt v té triangulaci nejsou |
450 |
457 |
for simplex in former_simplices[~equal_mask.all(axis=1)]: |
for simplex in former_simplices[~equal_mask.all(axis=1)]: |
451 |
458 |
#č když tam je |
#č když tam je |
452 |
459 |
#č každopadně tohle je rychlejší než přepočet spousty simplexů |
#č každopadně tohle je rychlejší než přepočet spousty simplexů |
453 |
|
isin = np.any(np.all(np.isin(bx.tri.simplices, simplex),axis=1)) |
|
|
460 |
|
#isin = np.any(np.all(np.isin(bx.tri.simplices, simplex),axis=1)) |
|
461 |
|
# few times faster |
|
462 |
|
isin = (bx.tri.simplices == simplex).all(axis=1).any() |
454 |
463 |
if not isin: |
if not isin: |
455 |
464 |
bx._invalidate_simplex(simplex) |
bx._invalidate_simplex(simplex) |
456 |
465 |
|
|
|
... |
... |
class Chrt(DiceBox): |
458 |
467 |
|
|
459 |
468 |
# změněné simplexy přepočítáme |
# změněné simplexy přepočítáme |
460 |
469 |
for simplex in bx.tri.simplices[:len(former_simplices)][~equal_mask.all(axis=1)]: |
for simplex in bx.tri.simplices[:len(former_simplices)][~equal_mask.all(axis=1)]: |
461 |
|
bx.estimate_simplex(simplex) |
|
|
470 |
|
#č ty množiny jsou tak trošku overkill, ale budiž |
|
471 |
|
if tuple(simplex) not in bx.simplices_set: |
|
472 |
|
bx.estimate_simplex(simplex) |
462 |
473 |
|
|
463 |
474 |
|
|
464 |
475 |
# teď nové simplexy |
# teď nové simplexy |
465 |
476 |
# simplexy свежего разлива |
# simplexy свежего разлива |
466 |
477 |
for simplex in bx.tri.simplices[len(former_simplices):]: |
for simplex in bx.tri.simplices[len(former_simplices):]: |
467 |
|
bx.estimate_simplex(simplex) |
|
|
478 |
|
#č ty množiny jsou tak trošku overkill, ale budiž |
|
479 |
|
if tuple(simplex) not in bx.simplices_set: |
|
480 |
|
bx.estimate_simplex(simplex) |
468 |
481 |
|
|
469 |
482 |
|
|
470 |
483 |
|
|
|
... |
... |
class Chrt(DiceBox): |
690 |
703 |
#č Našim úkolem je zjistit co je simplex zač |
#č Našim úkolem je zjistit co je simplex zač |
691 |
704 |
#č a ty zelené ignorovat |
#č a ty zelené ignorovat |
692 |
705 |
|
|
693 |
|
#č zde spolehám na to, že pořadí těch indexů se nikdy nezmění |
|
694 |
|
#č (dá se něco takovýho očekavát podle toho co jsem čet v dokumentaci) |
|
695 |
|
if not tuple(indices) in bx.simplex_stats: |
|
696 |
|
|
|
697 |
|
# I'll use tree_space as a weigthing space |
|
698 |
|
# It could be separeted, but I am a little bit tired |
|
699 |
|
# from so much different spaces over there |
|
700 |
|
event, event_id, fr, wfr = sx.get_indices_event(bx, indices, bx.tree_space) |
|
701 |
|
|
|
702 |
|
# -1 = 'outside', 0=success, 1=failure, 2=mix |
|
703 |
|
if event_id != 0: |
|
704 |
|
#оӵ чылкыт f_model |
|
705 |
|
#č do sample_simplexu musíme poslat čístý f_model |
|
706 |
|
# we should send pure f_model to sample_simplex() |
|
707 |
|
vertices = bx.f_model[indices] |
|
708 |
|
print("estimate", indices) |
|
709 |
|
h_plan, convex_hull, simplex_measure = sx.sample_simplex(vertices,\ |
|
710 |
|
model_space=bx.tri_space, sampling_space=bx.sampling_space, nis=bx.simplex_budget) |
|
|
706 |
|
#č ty množiny jsou tak trošku overkill, ale budiž |
|
707 |
|
bx.simplices_set.add(tuple(indices)) |
|
708 |
|
|
|
709 |
|
|
|
710 |
|
# I'll use tree_space as a weigthing space |
|
711 |
|
# It could be separeted, but I am a little bit tired |
|
712 |
|
# from so much different spaces over there |
|
713 |
|
event, event_id, fr, wfr = sx.get_indices_event(bx, indices, bx.tree_space) |
|
714 |
|
|
|
715 |
|
# -1 = 'outside', 0=success, 1=failure, 2=mix |
|
716 |
|
if event_id != 0: |
|
717 |
|
#оӵ чылкыт f_model |
|
718 |
|
#č do sample_simplexu musíme poslat čístý f_model |
|
719 |
|
# we should send pure f_model to sample_simplex() |
|
720 |
|
vertices = bx.f_model[indices] |
|
721 |
|
print("estimate", indices) |
|
722 |
|
h_plan, convex_hull, simplex_measure = sx.sample_simplex(vertices,\ |
|
723 |
|
model_space=bx.tri_space, sampling_space=bx.sampling_space, nis=bx.simplex_budget) |
|
724 |
|
|
|
725 |
|
|
|
726 |
|
fm = simplex_measure * fr |
|
727 |
|
wfm = simplex_measure * wfr |
|
728 |
|
|
|
729 |
|
#č ISSI tu nemáme, místo toho prostě ukladáme co máme do slovníku |
|
730 |
|
bx.simplex_stats[tuple(indices)] = (event_id, simplex_measure, fm, wfm) |
|
731 |
|
|
|
732 |
|
mask = ~h_plan.is_outside |
|
733 |
|
if event == 'mix': |
711 |
734 |
|
|
|
735 |
|
candidates = h_plan[mask] |
|
736 |
|
#bx._former_candidates_recovering(candidates, convex_hull, bx.unjudged_candidates) |
|
737 |
|
bx._former_candidates_recovering(candidates, convex_hull, bx.former_candidates) |
712 |
738 |
|
|
713 |
|
fm = simplex_measure * fr |
|
714 |
|
wfm = simplex_measure * wfr |
|
|
739 |
|
candidates.event_id = np.full(len(candidates), event_id, dtype=np.int8) |
|
740 |
|
#candidates.simplex = np.full((len(candidates), bx.nvar+1), indices) |
715 |
741 |
|
|
716 |
|
#č ISSI tu nemáme, místo toho prostě ukladáme co máme do slovníku |
|
717 |
|
bx.simplex_stats[tuple(indices)] = (event_id, simplex_measure, fm, wfm) |
|
|
742 |
|
#č vyhodnotíme je |
|
743 |
|
bx.assess_candidates(candidates) |
718 |
744 |
|
|
719 |
|
mask = ~h_plan.is_outside |
|
720 |
|
if event == 'mix': |
|
721 |
|
|
|
722 |
|
candidates = h_plan[mask] |
|
723 |
|
bx._former_candidates_recovering(candidates, convex_hull, bx.unjudged_candidates) |
|
724 |
|
bx._former_candidates_recovering(candidates, convex_hull, bx.former_candidates) |
|
725 |
|
|
|
726 |
|
candidates.event_id = np.full(len(candidates), event_id, dtype=np.int8) |
|
727 |
|
#candidates.simplex = np.full((len(candidates), bx.nvar+1), indices) |
|
728 |
|
|
|
729 |
|
#č vyhodnotíme je |
|
730 |
|
bx.assess_candidates(candidates) |
|
731 |
|
|
|
732 |
|
#č vzorky je třeba přidát ke kandidatům |
|
733 |
|
#č jako, nic nepokazí, ale čo tam připadně bylo - přepíše |
|
734 |
|
bx.candidates_index[tuple(indices)] = candidates |
|
735 |
|
|
|
736 |
|
|
|
737 |
745 |
#č vzorky je třeba přidát ke kandidatům |
#č vzorky je třeba přidát ke kandidatům |
738 |
|
#č zás nakladaní s odpadem... |
|
739 |
|
#bx.unjudged_candidates.append(h_plan[~mask]) |
|
740 |
|
#č roušky jsou dráhé |
|
741 |
|
bx.unjudged_candidates.append(h_plan) |
|
|
746 |
|
#č jako, nic nepokazí, ale čo tam připadně bylo - přepíše |
|
747 |
|
bx.candidates_index[tuple(indices)] = candidates |
|
748 |
|
|
|
749 |
|
|
|
750 |
|
#č vzorky je třeba přidát ke kandidatům |
|
751 |
|
#č zás nakladaní s odpadem... |
|
752 |
|
#bx.unjudged_candidates.append(h_plan[~mask]) |
|
753 |
|
#č roušky jsou dráhé |
|
754 |
|
bx.unjudged_candidates.append(h_plan) |
742 |
755 |
|
|
743 |
756 |
|
|
744 |
757 |
#č vyhodil jsem simplex_id'y |
#č vyhodil jsem simplex_id'y |
745 |
758 |
def _invalidate_simplex(bx, indices): |
def _invalidate_simplex(bx, indices): |
746 |
759 |
simplex = tuple(indices) |
simplex = tuple(indices) |
747 |
760 |
|
|
|
761 |
|
#č ten simplex tam musí být, |
|
762 |
|
#č pokud teda bo boxu nikdo nesahá... |
|
763 |
|
bx.simplices_set.remove(simplex) |
|
764 |
|
|
748 |
765 |
if simplex in bx.simplex_stats: |
if simplex in bx.simplex_stats: |
749 |
766 |
bx.simplex_stats.pop(simplex) |
bx.simplex_stats.pop(simplex) |
750 |
767 |
|
|