我想在gekko中定义一个方程,但随之而来的是错误:
Traceback (most recent call last):
File "/Users/stefantomaschko/Desktop/Bundeswettbewerb Informatik/2.Runde/Päckchen/paeckchen_gurobi.py", line 131, in <module>
m.solve()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/gekko/gekko.py", line 2166, in solve
raise Exception(apm_error)
Exception: @error: Equation Definition
Equation without an equality (=) or inequality (>,<)
true
STOPPING...
我的代码(不是所有的功能,但最重要的功能):
def fitness(var):
anzahl_sorte_stil = {}
boxes = convert(var)
print(boxes)
stile = set()
for var_box in var:
#anzahl_box = []
for v in var_box:
try:
value = int(str(v.value))
except:
value = int(float(str(v.value[0])))# if v.value != None else 0
info = info_name(v)
stile.add(info[1])
if info not in anzahl_sorte_stil:
anzahl_sorte_stil[info] = value
else:
anzahl_sorte_stil[info] += value
#anzahl_box.append(value)
# if min(anzahl_box) == 0:
gruppen = finde_gruppen(stile)
for g in gruppen:
if g not in kombinierbar:
return unmoeglich
#print(anzahl_sorte_stil)
uebrig = 0
for kleid in kleider:
dif = kleid[2] - anzahl_sorte_stil[(kleid[0],kleid[1])]
if dif<0:
print("ZU OFT VERWENDET!")
return unmoeglich
else:
uebrig += dif
return uebrig
sorten,stile,kombinierbar,kleider,gesamt = read_data("paeckchen0.txt")
unmoeglich = gesamt+1
min_boxen,max_boxen = get_min_max_boxen(sorten,kleider)
print("Min. Anzahl Boxen: ", min_boxen)
print("Max. Anzahl Boxen: ", max_boxen)
m = GEKKO(remote=False)
m.options.max_time = 1000
m.options.max_iter = 1000
m.options.max_memory = 1000
var = [[] for _ in range(max_boxen)]
for i,var_box in enumerate(var):
for kleid in kleider:
#print(kleid[:2])
var_box.append(m.Var(0,lb=1,ub=min((kleid[2],3)),integer=True,name=f"{kleid[0]}_{kleid[1]}_{i}"))#wie oft ist Kleid {kleid[:2]} in Box {i}
#m.Equation(fitness(var) < gesamt)
m.Minimize(fitness(var))
m.Equation(fitness(var) <= unmoeglich)
m.options.SOLVER=1
m.solve()
在文档中我没有发现任何与此有关的东西.有人可以帮我修改它.我也会很高兴看到我的代码,为什么它没有找到正确的解决方案.现在我想实现这个等式,甚至不允许不正确的解.