changed signatures to have also a main ingredient set
This commit is contained in:
parent
9c406c3e48
commit
33f22a5050
File diff suppressed because it is too large
Load Diff
@ -72,6 +72,12 @@ m_mix = dill.load(open("../RecipeAnalysis/m_mix.dill", "rb"))
|
|||||||
m_base_act = dill.load(open("../RecipeAnalysis/m_base_act.dill", "rb"))
|
m_base_act = dill.load(open("../RecipeAnalysis/m_base_act.dill", "rb"))
|
||||||
m_base_mix = dill.load(open("../RecipeAnalysis/m_base_mix.dill", "rb"))
|
m_base_mix = dill.load(open("../RecipeAnalysis/m_base_mix.dill", "rb"))
|
||||||
|
|
||||||
|
|
||||||
|
m_grouped_mix = dill.load(open("../RecipeAnalysis/m_grouped_mix_raw.dill", "rb"))
|
||||||
|
m_grouped_act = dill.load(open("../RecipeAnalysis/m_grouped_act_raw.dill", "rb"))
|
||||||
|
m_grouped_base_act = dill.load(open("../RecipeAnalysis/m_grouped_base_act_raw.dill", "rb"))
|
||||||
|
|
||||||
|
|
||||||
#m_act.apply_threshold(3)
|
#m_act.apply_threshold(3)
|
||||||
#m_mix.apply_threshold(3)
|
#m_mix.apply_threshold(3)
|
||||||
#m_base_act.apply_threshold(5)
|
#m_base_act.apply_threshold(5)
|
||||||
@ -88,6 +94,10 @@ m_mix.compile()
|
|||||||
m_base_act.compile()
|
m_base_act.compile()
|
||||||
m_base_mix.compile()
|
m_base_mix.compile()
|
||||||
|
|
||||||
|
m_grouped_mix.compile()
|
||||||
|
m_grouped_act.compile()
|
||||||
|
m_grouped_base_act.compile()
|
||||||
|
|
||||||
c_act = m_act._csr
|
c_act = m_act._csr
|
||||||
c_mix = m_mix._csr
|
c_mix = m_mix._csr
|
||||||
c_base_act = m_base_act._csr
|
c_base_act = m_base_act._csr
|
||||||
@ -455,6 +465,9 @@ class RecipeTreeNode(object):
|
|||||||
|
|
||||||
# ### Mix Node
|
# ### Mix Node
|
||||||
|
|
||||||
|
# For the Node Score: just make a simple lookup whether this combination is seen or not. So the node Score is defined as:
|
||||||
|
#
|
||||||
|
|
||||||
class MixNode(RecipeTreeNode):
|
class MixNode(RecipeTreeNode):
|
||||||
def __init__(self, constant=False):
|
def __init__(self, constant=False):
|
||||||
super().__init__("mix", constant, single_child=False)
|
super().__init__("mix", constant, single_child=False)
|
||||||
@ -536,12 +549,22 @@ class MixNode(RecipeTreeNode):
|
|||||||
#s_base += sym_score(ing_a._base_ingredient, ing_b._base_ingredient, m_base_mix, c_base_mix)
|
#s_base += sym_score(ing_a._base_ingredient, ing_b._base_ingredient, m_base_mix, c_base_mix)
|
||||||
|
|
||||||
#s += sym_score(ing_a.to_json(), ing_b.to_json(), m_mix, c_mix)
|
#s += sym_score(ing_a.to_json(), ing_b.to_json(), m_mix, c_mix)
|
||||||
p1 = sym_p_a_given_b(ing_a.to_json(), ing_b.to_json(), m_mix, c_mix)
|
|
||||||
p2 = sym_p_a_given_b(ing_b.to_json(), ing_a.to_json(), m_mix, c_mix)
|
|
||||||
|
|
||||||
s += 0.5 * p1 + 0.5 * p2
|
# old method:
|
||||||
|
#p1 = sym_p_a_given_b(ing_a.to_json(), ing_b.to_json(), m_mix, c_mix)
|
||||||
|
#p2 = sym_p_a_given_b(ing_b.to_json(), ing_a.to_json(), m_mix, c_mix)
|
||||||
|
#s += 0.5 * p1 + 0.5 * p2
|
||||||
|
|
||||||
except:
|
|
||||||
|
ia = m_mix._label_index[ing_a.to_json()]
|
||||||
|
ib = m_mix._label_index[ing_b.to_json()]
|
||||||
|
|
||||||
|
if c_mix[ia,ib] > 0 or c_mix[ib,ia] > 0:
|
||||||
|
s += 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
except KeyError as e:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
#s_base /= len(pairwise_tuples)
|
#s_base /= len(pairwise_tuples)
|
||||||
@ -652,7 +675,7 @@ class ActionNode(RecipeTreeNode):
|
|||||||
|
|
||||||
class Tree(object):
|
class Tree(object):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def build_initial_tree(ingredients: list, max_n = 4, wheel_turns = 2):
|
def build_initial_tree(ingredients: list, main_ingredients: list, max_n = 4, wheel_turns = 2):
|
||||||
|
|
||||||
'''
|
'''
|
||||||
# get action sets for ingredients
|
# get action sets for ingredients
|
||||||
@ -833,7 +856,7 @@ class Tree(object):
|
|||||||
return list(constant_ingredients) + list(additional_ingredients)
|
return list(constant_ingredients) + list(additional_ingredients)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_ingredients(ingredients: list, additional_ings=0):
|
def from_ingredients(ingredients: list, main_ingredients: list, additional_ings=0):
|
||||||
root = None
|
root = None
|
||||||
|
|
||||||
constant_ingredients = ingredients
|
constant_ingredients = ingredients
|
||||||
@ -997,8 +1020,8 @@ class Tree(object):
|
|||||||
# ## Population
|
# ## Population
|
||||||
|
|
||||||
class Population(object):
|
class Population(object):
|
||||||
def __init__(self, start_ingredients, n_population = 10, max_additional_ings=0):
|
def __init__(self, start_ingredients, main_ingredients, n_population = 10, max_additional_ings=0):
|
||||||
self.population = [Tree.from_ingredients(start_ingredients, additional_ings=max_additional_ings) for i in range(n_population)]
|
self.population = [Tree.from_ingredients(start_ingredients, main_ingredients, additional_ings=max_additional_ings) for i in range(n_population)]
|
||||||
self._n = n_population
|
self._n = n_population
|
||||||
self._mix_min = None
|
self._mix_min = None
|
||||||
self._mix_max = None
|
self._mix_max = None
|
||||||
@ -1115,3 +1138,19 @@ class Population(object):
|
|||||||
display(t.root().dot())
|
display(t.root().dot())
|
||||||
|
|
||||||
|
|
||||||
|
# ## Run Evolutionary Algorithm
|
||||||
|
|
||||||
|
#p = Population(["bacon", "tomato", "onion"],['noodle'], max_additional_ings=6)
|
||||||
|
|
||||||
|
|
||||||
|
#p_ingredient_unprepared(list(p.population[0].root().childs())[0]._name) < 0.2
|
||||||
|
|
||||||
|
|
||||||
|
#p.run(100)
|
||||||
|
|
||||||
|
|
||||||
|
#p.plot_population(collect_scores=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -123,7 +123,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "5796ec52773740c59e747c0e5f77410e",
|
"model_id": "affefd1263f44e97815b9c32f49d69d9",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -149,7 +149,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "92fd11191481475a9c40ae76201b4772",
|
"model_id": "29990add3612462abfb4dcc60f2ff7ca",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -163,7 +163,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "618b5a44910843bbaed8b36c3ad2bc46",
|
"model_id": "4b66883d839f49e9b764f683ba9079c9",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -189,7 +189,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "301ebb9ed6024493ad85c2b79402345e",
|
"model_id": "645f200c9fa441f8964683dbcd188ad0",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -215,7 +215,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "c90d303cd2cb43d1aae401ac6226e3a1",
|
"model_id": "d0c4b6f97b894211a5a1c2cf052e1d58",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -229,7 +229,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "cea1f9de60344298ac8417d755ad74df",
|
"model_id": "889ed0ea7cc24663b40beb30e8a1abcc",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -243,7 +243,7 @@
|
|||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"application/vnd.jupyter.widget-view+json": {
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
"model_id": "3ac8e962dfeb445fa3417dbdbfd5c44c",
|
"model_id": "fa434784f8364bc692301a162824cb30",
|
||||||
"version_major": 2,
|
"version_major": 2,
|
||||||
"version_minor": 0
|
"version_minor": 0
|
||||||
},
|
},
|
||||||
@ -321,7 +321,10 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"w_run_button = widgets.Button(description=\"run EA\")\n",
|
"w_run_button = widgets.Button(description=\"run EA\")\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"p = None\n",
|
||||||
|
"\n",
|
||||||
"def run(e=None):\n",
|
"def run(e=None):\n",
|
||||||
|
" global p\n",
|
||||||
" w_result_out.clear_output()\n",
|
" w_result_out.clear_output()\n",
|
||||||
" with w_result_out:\n",
|
" with w_result_out:\n",
|
||||||
" p = EvolutionaryAlgorithm.Population(\n",
|
" p = EvolutionaryAlgorithm.Population(\n",
|
||||||
|
Loading…
Reference in New Issue
Block a user