File dicebox.py changed (mode: 100644) (index e18d534..096af44) |
... |
... |
class Chrt(DiceBox): |
349 |
349 |
#ё без поллитры было не разобраться, что этот слоёный пирог делал |
#ё без поллитры было не разобраться, что этот слоёный пирог делал |
350 |
350 |
def __init__(bx, sample_object, tri_space='Rn', tree_space=None,\ |
def __init__(bx, sample_object, tri_space='Rn', tree_space=None,\ |
351 |
351 |
sampling_space=None, kechato_space='U', potential='psee',\ |
sampling_space=None, kechato_space='U', potential='psee',\ |
352 |
|
p_norm=2, budget=1000, simplex_budget=100, \ |
|
|
352 |
|
p_norm=2, budget=1000, simplex_budget=100, q=0.5,\ |
353 |
353 |
LHS_correction=False, design=None): |
LHS_correction=False, design=None): |
354 |
354 |
|
|
355 |
355 |
|
|
|
... |
... |
class Chrt(DiceBox): |
369 |
369 |
bx.budget = budget |
bx.budget = budget |
370 |
370 |
bx.simplex_budget = simplex_budget |
bx.simplex_budget = simplex_budget |
371 |
371 |
bx.p_norm = p_norm |
bx.p_norm = p_norm |
|
372 |
|
bx.q = q |
372 |
373 |
bx.potential = potential |
bx.potential = potential |
373 |
374 |
bx.LHS_correction = LHS_correction |
bx.LHS_correction = LHS_correction |
374 |
375 |
bx.design = design |
bx.design = design |
|
... |
... |
class Chrt(DiceBox): |
715 |
716 |
|
|
716 |
717 |
|
|
717 |
718 |
# potřebuju nová slovesa |
# potřebuju nová slovesa |
|
719 |
|
#ё пранк вышел из под контроля |
|
720 |
|
#č jako, byl to takovej vtipeček označit potenciál dvojitým e |
|
721 |
|
#č stala se z toho ale konvence, ne že by všal byla ničím nepodložena |
|
722 |
|
#č algorithmus se sestavá ze dvou částí: |
|
723 |
|
#č tri - triangulace, |
|
724 |
|
#č tree - stromovej cKDTree scipy algorithmus, který hledá nejblížší body |
|
725 |
|
#č (nechám bokem otázku, že ten asi hned na začátku nepřepiná do banalního brute force) |
|
726 |
|
#č Každopadně, davá smysl, že psee, chee atd. potenciály spadají do tree části. |
718 |
727 |
def assess_candidates(bx, candidates): |
def assess_candidates(bx, candidates): |
|
728 |
|
#č nikdo to nepouživá, ale se mi nějaký takový parameter libí. |
719 |
729 |
candidates.nsim_stamp = np.full(len(candidates), bx.nsim) |
candidates.nsim_stamp = np.full(len(candidates), bx.nsim) |
720 |
730 |
|
|
721 |
731 |
candidates_tree = getattr(candidates, bx.tree_space) |
candidates_tree = getattr(candidates, bx.tree_space) |
|
... |
... |
class Chrt(DiceBox): |
734 |
744 |
dd[mask] = 0 |
dd[mask] = 0 |
735 |
745 |
bx._logger(msg="cKDTree zlobí", orphan_candidates=candidates[mask], P=candidates[mask].P) |
bx._logger(msg="cKDTree zlobí", orphan_candidates=candidates[mask], P=candidates[mask].P) |
736 |
746 |
|
|
737 |
|
|
|
|
747 |
|
# the most agressive potential ever |
738 |
748 |
candidates.dd = dd |
candidates.dd = dd |
739 |
|
candidates.ii = ii |
|
740 |
|
|
|
741 |
749 |
|
|
742 |
750 |
if bx.potential in ('psee', 'fee', 'fee2'): |
if bx.potential in ('psee', 'fee', 'fee2'): |
743 |
751 |
#оӵ кучапи |
#оӵ кучапи |
|
... |
... |
class Chrt(DiceBox): |
749 |
757 |
PDF = PDFs[ii] |
PDF = PDFs[ii] |
750 |
758 |
pdf = candidates.pdf(bx.tree_space) |
pdf = candidates.pdf(bx.tree_space) |
751 |
759 |
|
|
752 |
|
candidates.tree_PDF = PDF |
|
753 |
|
candidates.tree_pdf = pdf |
|
754 |
|
|
|
755 |
|
candidates.tree_Pdf_mean = (pdf+PDF)/2 |
|
756 |
|
candidates.tree_Pdf_gmean = np.sqrt(pdf*PDF) |
|
757 |
|
candidates.volume = np.power(dd , bx.nvar) |
|
758 |
|
candidates.psee = candidates.tree_Pdf_gmean * candidates.volume |
|
759 |
|
candidates.fee = candidates.tree_Pdf_mean * candidates.volume * np.power(pdf/PDF, 1/(bx.nvar+1)) |
|
760 |
|
candidates.fee2 = candidates.tree_Pdf_mean * candidates.volume * np.power(pdf/PDF, 1/(bx.nvar*2)) |
|
|
760 |
|
tree_Pdf_mean = (pdf+PDF)/2 |
|
761 |
|
tree_Pdf_gmean = np.sqrt(pdf*PDF) |
|
762 |
|
volume = np.power(dd, bx.nvar) |
|
763 |
|
candidates.psee = tree_Pdf_gmean * volume |
|
764 |
|
candidates.fee = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar+1)) |
|
765 |
|
candidates.fee2 = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar*2)) |
761 |
766 |
|
|
762 |
767 |
elif bx.potential == 'ksee': # ksee |
elif bx.potential == 'ksee': # ksee |
763 |
768 |
#оӵ кечато |
#оӵ кечато |
|
... |
... |
class Chrt(DiceBox): |
768 |
773 |
# doufám, že je to legální |
# doufám, že je to legální |
769 |
774 |
ksee[i==ii] = lk.kechato_potential(bx.f_model[i], candidates[i==ii], kechato_space=bx.kechato_space) |
ksee[i==ii] = lk.kechato_potential(bx.f_model[i], candidates[i==ii], kechato_space=bx.kechato_space) |
770 |
775 |
candidates.ksee = ksee |
candidates.ksee = ksee |
|
776 |
|
|
|
777 |
|
elif bx.potential == 'q_psee': #č kup si |
|
778 |
|
#оӵ кучапи |
|
779 |
|
#č pejskovej potenciál |
|
780 |
|
#č psí-kučapí není invariántní vůči lineárním transformácím |
|
781 |
|
|
|
782 |
|
PDFs = bx.sample_box.pdf(bx.tree_space) |
|
783 |
|
# teď máme hustoty kandidatů a prislušejicích jím vzorků |
|
784 |
|
PDF = PDFs[ii] |
|
785 |
|
pdf = candidates.pdf(bx.tree_space) |
|
786 |
|
|
|
787 |
|
volume = np.power(dd, bx.nvar) |
|
788 |
|
candidates.psee = np.sqrt(pdf*PDF) * volume |
|
789 |
|
candidates.q_psee = pdf**bx.q * PDF**(1-bx.q) * volume |
|
790 |
|
|
|
791 |
|
|
|
792 |
|
elif bx.potential in ('chee', 'chee2'): |
|
793 |
|
PDFs = bx.sample_box.pdf(bx.tree_space) |
|
794 |
|
# teď máme hustoty kandidatů a prislušejicích jím vzorků |
|
795 |
|
PDF = PDFs[ii] |
|
796 |
|
candidates.PDF = PDF |
|
797 |
|
pdf = candidates.pdf(bx.tree_space) |
|
798 |
|
candidates.Pdf = pdf #č pdf() je funkce f_modelu |
|
799 |
|
|
|
800 |
|
|
|
801 |
|
tree_Pdf_gmean = np.sqrt(pdf*PDF) |
|
802 |
|
volume = np.power(dd, bx.nvar) |
|
803 |
|
candidates.psee = tree_Pdf_gmean * volume |
|
804 |
|
|
|
805 |
|
sum_squares = np.sqrt(np.sum(np.square(candidates.G), axis=1)) |
|
806 |
|
chi2 = stats.chi2.pdf(sum_squares, bx.nvar) |
|
807 |
|
candidates.chi2 = chi2 |
|
808 |
|
candidates.chee2 = np.sqrt(chi2*PDF) * volume |
|
809 |
|
|
|
810 |
|
r = np.sqrt(sum_squares) |
|
811 |
|
candidates.r = r |
|
812 |
|
chi = stats.chi.pdf(r, bx.nvar) |
|
813 |
|
candidates.chi = chi |
|
814 |
|
candidates.chee = np.sqrt(chi*PDF) * volume |
|
815 |
|
|
|
816 |
|
|
771 |
817 |
|
|
772 |
818 |
# prepare to elections |
# prepare to elections |
773 |
819 |
bx._nominate(candidates) |
bx._nominate(candidates) |
|
... |
... |
class Razitko(Erjee): |
1028 |
1074 |
#ё без поллитры было не разобраться, что этот слоёный пирог делал |
#ё без поллитры было не разобраться, что этот слоёный пирог делал |
1029 |
1075 |
def __init__(bx, sample_object, scheme, tri_space='Rn', tree_space=None,\ |
def __init__(bx, sample_object, scheme, tri_space='Rn', tree_space=None,\ |
1030 |
1076 |
sampling_space=None, kechato_space='U', potential='psee',\ |
sampling_space=None, kechato_space='U', potential='psee',\ |
1031 |
|
p_norm=2, budget=1000, \ |
|
|
1077 |
|
p_norm=2, q=0.5, budget=1000, \ |
1032 |
1078 |
LHS_correction=False, design=None): |
LHS_correction=False, design=None): |
1033 |
1079 |
|
|
1034 |
1080 |
bx.scheme = scheme |
bx.scheme = scheme |
|
... |
... |
class Razitko(Erjee): |
1047 |
1093 |
bx.kechato_space = kechato_space |
bx.kechato_space = kechato_space |
1048 |
1094 |
bx.budget = budget |
bx.budget = budget |
1049 |
1095 |
bx.p_norm = p_norm |
bx.p_norm = p_norm |
|
1096 |
|
bx.q = q |
1050 |
1097 |
bx.potential = potential |
bx.potential = potential |
1051 |
1098 |
bx.LHS_correction = LHS_correction |
bx.LHS_correction = LHS_correction |
1052 |
1099 |
bx.design = design |
bx.design = design |
|
... |
... |
class Goal(DiceBox): |
1252 |
1299 |
#č a zaroveň je nominuje na soutež. |
#č a zaroveň je nominuje na soutež. |
1253 |
1300 |
#č na vstupu assess_candidates musí být CandyBox |
#č na vstupu assess_candidates musí být CandyBox |
1254 |
1301 |
#č s jíž nastaveným event_id |
#č s jíž nastaveným event_id |
1255 |
|
#assess_candidates = Chrt.assess_candidates |
|
|
1302 |
|
assess_candidates = Chrt.assess_candidates |
1256 |
1303 |
_nominate = Chrt._nominate |
_nominate = Chrt._nominate |
1257 |
1304 |
|
|
1258 |
1305 |
#č explicitně převezmu některé funkce |
#č explicitně převezmu některé funkce |
|
... |
... |
class Goal(DiceBox): |
1439 |
1486 |
# bx.judge_candidates(bx.candidates) |
# bx.judge_candidates(bx.candidates) |
1440 |
1487 |
# bx.assess_candidates(bx.candidates) |
# bx.assess_candidates(bx.candidates) |
1441 |
1488 |
|
|
1442 |
|
#ё пранк вышел из под контроля |
|
1443 |
|
#č jako, byl to takovej vtipeček označit potenciál dvojitým e |
|
1444 |
|
#č stala se z toho ale konvence, ne že by všal byla ničím nepodložena |
|
1445 |
|
#č algorithmus se sestavá ze dvou částí: |
|
1446 |
|
#č tri - triangulace, |
|
1447 |
|
#č tree - stromovej cKDTree scipy algorithmus, který hledá nejblížší body |
|
1448 |
|
#č (nechám bokem otázku, že ten asi hned na začátku nepřepiná do banalního brute force) |
|
1449 |
|
#č Každopadně, davá smysl, že psee, chee atd. potenciály spadají do tree části. |
|
1450 |
|
def assess_candidates(bx, candidates): |
|
1451 |
|
#č nikdo to nepouživá, ale se mi nějaký takový parameter libí. |
|
1452 |
|
candidates.nsim_stamp = np.full(len(candidates), bx.nsim) |
|
1453 |
1489 |
|
|
1454 |
|
candidates_tree = getattr(candidates, bx.tree_space) |
|
1455 |
|
dd, ii = bx.tree.query(candidates_tree, k=1, p=bx.p_norm) |
|
1456 |
|
|
|
1457 |
|
# from scipy documentation: |
|
1458 |
|
# [dd] Missing neighbors are indicated with infinite distances. |
|
1459 |
|
# [ii] Missing neighbors are indicated with self.n |
|
1460 |
|
|
|
1461 |
|
#č mǐ radši budeme předpokladat nulovou vzdálenost a třeba nulového souseda |
|
1462 |
|
#č ne, radší posledného souseda |
|
1463 |
|
#č pokud ten chytrej strom si myslí, že nějaký kandidat nemá spolubydlu |
|
1464 |
|
mask = ii == bx.nsim |
|
1465 |
|
if np.any(mask): #č ať mě to neznervozňuje |
|
1466 |
|
ii[mask] = bx.nsim - 1 |
|
1467 |
|
dd[mask] = 0 |
|
1468 |
|
bx._logger(msg="cKDTree zlobí", orphan_candidates=candidates[mask], P=candidates[mask].P) |
|
1469 |
|
|
|
1470 |
|
# the most agressive potential ever |
|
1471 |
|
candidates.dd = dd |
|
1472 |
|
|
|
1473 |
|
if bx.potential in ('psee', 'fee', 'fee2'): |
|
1474 |
|
#оӵ кучапи |
|
1475 |
|
#č pejskovej potenciál |
|
1476 |
|
#č psí-kučapí není invariántní vůči lineárním transformácím |
|
1477 |
|
|
|
1478 |
|
PDFs = bx.sample_box.pdf(bx.tree_space) |
|
1479 |
|
# teď máme hustoty kandidatů a prislušejicích jím vzorků |
|
1480 |
|
PDF = PDFs[ii] |
|
1481 |
|
pdf = candidates.pdf(bx.tree_space) |
|
1482 |
|
|
|
1483 |
|
tree_Pdf_mean = (pdf+PDF)/2 |
|
1484 |
|
tree_Pdf_gmean = np.sqrt(pdf*PDF) |
|
1485 |
|
volume = np.power(dd, bx.nvar) |
|
1486 |
|
candidates.psee = tree_Pdf_gmean * volume |
|
1487 |
|
candidates.fee = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar+1)) |
|
1488 |
|
candidates.fee2 = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar*2)) |
|
1489 |
|
|
|
1490 |
|
elif bx.potential == 'ksee': # ksee |
|
1491 |
|
#оӵ кечато |
|
1492 |
|
#č koťatko-káčátkovej potenciál |
|
1493 |
|
#č ksí-kěčató není invariántní vůčí rotacím |
|
1494 |
|
ksee = np.empty(len(candidates)) |
|
1495 |
|
for i in np.unique(ii): |
|
1496 |
|
# doufám, že je to legální |
|
1497 |
|
ksee[i==ii] = lk.kechato_potential(bx.f_model[i], candidates[i==ii], kechato_space=bx.kechato_space) |
|
1498 |
|
candidates.ksee = ksee |
|
1499 |
|
|
|
1500 |
|
elif bx.potential == 'q_psee': #č kup si |
|
1501 |
|
#оӵ кучапи |
|
1502 |
|
#č pejskovej potenciál |
|
1503 |
|
#č psí-kučapí není invariántní vůči lineárním transformácím |
|
1504 |
|
|
|
1505 |
|
PDFs = bx.sample_box.pdf(bx.tree_space) |
|
1506 |
|
# teď máme hustoty kandidatů a prislušejicích jím vzorků |
|
1507 |
|
PDF = PDFs[ii] |
|
1508 |
|
pdf = candidates.pdf(bx.tree_space) |
|
1509 |
|
|
|
1510 |
|
volume = np.power(dd, bx.nvar) |
|
1511 |
|
candidates.psee = np.sqrt(pdf*PDF) * volume |
|
1512 |
|
candidates.q_psee = pdf**bx.q * PDF**(1-bx.q) * volume |
|
1513 |
|
|
|
1514 |
|
|
|
1515 |
|
elif bx.potential in ('chee', 'chee2'): |
|
1516 |
|
PDFs = bx.sample_box.pdf(bx.tree_space) |
|
1517 |
|
# teď máme hustoty kandidatů a prislušejicích jím vzorků |
|
1518 |
|
PDF = PDFs[ii] |
|
1519 |
|
candidates.PDF = PDF |
|
1520 |
|
pdf = candidates.pdf(bx.tree_space) |
|
1521 |
|
candidates.Pdf = pdf #č pdf() je funkce f_modelu |
|
1522 |
|
|
|
1523 |
|
|
|
1524 |
|
tree_Pdf_gmean = np.sqrt(pdf*PDF) |
|
1525 |
|
volume = np.power(dd, bx.nvar) |
|
1526 |
|
candidates.psee = tree_Pdf_gmean * volume |
|
1527 |
|
|
|
1528 |
|
sum_squares = np.sqrt(np.sum(np.square(candidates.G), axis=1)) |
|
1529 |
|
chi2 = stats.chi2.pdf(sum_squares, bx.nvar) |
|
1530 |
|
candidates.chi2 = chi2 |
|
1531 |
|
candidates.chee2 = np.sqrt(chi2*PDF) * volume |
|
1532 |
|
|
|
1533 |
|
r = np.sqrt(sum_squares) |
|
1534 |
|
candidates.r = r |
|
1535 |
|
chi = stats.chi.pdf(r, bx.nvar) |
|
1536 |
|
candidates.chi = chi |
|
1537 |
|
candidates.chee = np.sqrt(chi*PDF) * volume |
|
1538 |
|
|
|
1539 |
|
|
|
1540 |
|
|
|
1541 |
|
# prepare to elections |
|
1542 |
|
bx._nominate(candidates) |
|
1543 |
1490 |
|
|
1544 |
1491 |
|
|
1545 |
1492 |
def _ghull_outside_callback(bx, outside_nodes): |
def _ghull_outside_callback(bx, outside_nodes): |
|
... |
... |
class Goal(DiceBox): |
1760 |
1707 |
reader.export_estimation(bx.stm_filename, bx.global_stats) |
reader.export_estimation(bx.stm_filename, bx.global_stats) |
1761 |
1708 |
|
|
1762 |
1709 |
|
|
1763 |
|
##č nie treba počítat odhady v každem kroku |
|
1764 |
|
##č ale zas, taky že chceme do článků davat nějaké diagramy |
|
1765 |
|
# |
|
1766 |
|
##č |
|
1767 |
|
##č po 2. kroku ghull.fire() nastaví vnější poloměr R a dovnitř už ani nesahne. |
|
1768 |
|
##č Je to v porádku, pokud rozhodování je v G prostoru, |
|
1769 |
|
##č protože v druhem kroku algoritmus nějak zvolil ten nejoptimálnější poloměr |
|
1770 |
|
##č a není v dalším kroku skutečně důvod pod ten poloměr jít. |
|
1771 |
|
##č Pokud rozhodujeme v R prostoru s nějakým divokým rozdělením - už je to trošku problem. |
|
1772 |
|
# |
|
1773 |
|
##č Jak poznam, že není dostatek teček, nebo je nějaký problem? Jakou chybu hodí Ghull? |
|
1774 |
|
|
|
1775 |
1710 |
|
|
1776 |
1711 |
|
|
1777 |
1712 |
|
|