Playtpus adaptation from LINGO software
Closed this issue · 3 comments
Hi. I am trying to adapt my problem from LINGO software to Playtpus language and I cannot run this code. Someone can help to tell me what was wrong? The code is:
And yep, the problem is single objective to later turn on multiobjective. LINGO does support only only one objective.
pip install platypus-opt
#variaveis
S_preco = 1069.23;
F_preco = 1071.09;
OB_preco = 2006.66;
OR_preco = 2669.21;
B_preco = 2540.47;
S_custo = 533.17;
F_custo = 569.89;
OB_custo = 1384.39;
OR_custo = 1466.34;
B_custo = 2389.89;
S_total = 2329278;
S_percentoleo = 0.2057;
C_percentoleo = 0.0064;
OBF_percentoleo = 0.22;
OR_massamolar = 873*0.000001;
M_massamolar = 32*0.000001;
B_massamolar = 292*0.000001;
G_massamolar = 92*0.000001;
S_capacidade = 3600000;
OR_capacidade = 367200;
B_capacidade = 887760*(880/1000);
S_demanda = 80638;
F_demanda = 398984;
OB_demanda = 164700;
OR_demanda = 164700;
B_demanda = 77634;
from platypus import NSGAII, Problem, Real
def belegundu(vars):
S_comercio = vars[0]
F_comercio = vars[1]
OB_comercio = vars[2]
OR_comercio = vars[3]
B_total = vars[4]
S_insumo = vars[5]
C_insumo = vars[6]
OB_total = vars[7]
OR_total = vars[8]
OR_biodiesel = vars[9]
MOL = vars[10]
M_insumo = vars[11]
G_comercio = vars[12]
return [-1*(S_comercio*S_preco - S_comercio*S_custo + F_comercio*F_preco - F_comercio*F_custo + OB_comercio*OB_preco - OB_comercio*OB_custo + OR_comercio*OR_preco - OR_comercio*OR_custo + B_total*B_preco - B_total*B_custo),1],
[S_total - S_comercio - S_insumo,
S_insumo - C_insumo - F_comercio - OB_total,
C_insumo - 0.04*S_insumo,
OB_total - (F_comercio*OBF_percentoleo)/(1 - OBF_percentoleo),
OB_total - OB_comercio - OR_total,
OR_total - OR_comercio - OR_biodiesel,
OR_biodiesel - MOL*OR_massamolar,
M_insumo - 3*MOL*M_massamolar,
B_total - 3*MOL*B_massamolar,
G_comercio - MOL*G_massamolar,
S_insumo - S_capacidade,
OR_total - OR_capacidade,
B_total - B_capacidade,
S_comercio - S_demanda,
F_comercio - F_demanda,
OB_comercio - OB_demanda,
OR_comercio - OR_demanda,
B_total - B_demanda]
problem = Problem(13, 2, 18)
problem.types[:] = [Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278), Real(0, 2329278)]
problem.constraints[0] = "==0"
problem.constraints[1] = "==0"
problem.constraints[2] = "==0"
problem.constraints[3] = "==0"
problem.constraints[4] = "==0"
problem.constraints[5] = "==0"
problem.constraints[6] = "==0"
problem.constraints[7] = "==0"
problem.constraints[8] = "==0"
problem.constraints[9] = "==0"
problem.constraints[10] = "<=0"
problem.constraints[11] = "<=0"
problem.constraints[12] = "<=0"
problem.constraints[13] = ">=0"
problem.constraints[14] = ">=0"
problem.constraints[15] = ">=0"
problem.constraints[16] = ">=0"
problem.constraints[17] = ">=0"
problem.function = belegundu
algorithm = NSGAII(problem)
algorithm.run(10000000)
And the issue is:
ValueError Traceback (most recent call last)
<ipython-input-3-e2272cbb5469> in <module>()
58
59 algorithm = NSGAII(problem)
---> 60 algorithm.run(10000000)
10 frames
/usr/local/lib/python3.6/dist-packages/platypus/core.py in evaluate(self, solution)
187
188 if self.nconstrs > 0:
--> 189 (objs, constrs) = self.function(solution.variables)
190 else:
191 objs = self.function(solution.variables)
ValueError: not enough values to unpack (expected 2, got 1)
I cannot understand what I did wrong. Someone can help me? Does anyone knows Playtpus tool from Python library?
This line is returning a tuple of length one (the trailing comma). The line below it is not evaluated.
return [-1*(S_comercio*S_preco - S_comercio*S_custo + F_comercio*F_preco - F_comercio*F_custo + OB_comercio*OB_preco - OB_comercio*OB_custo + OR_comercio*OR_preco - OR_comercio*OR_custo + B_total*B_preco - B_total*B_custo),1],
Try this instead:
objs = [-1*(S_comercio*S_preco - S_comercio*S_custo + F_comercio*F_preco - F_comercio*F_custo + OB_comercio*OB_preco - OB_comercio*OB_custo + OR_comercio*OR_preco - OR_comercio*OR_custo + B_total*B_preco - B_total*B_custo),1]
constrs = [
S_total - S_comercio - S_insumo,
S_insumo - C_insumo - F_comercio - OB_total,
C_insumo - 0.04*S_insumo,
OB_total - (F_comercio*OBF_percentoleo)/(1 - OBF_percentoleo),
OB_total - OB_comercio - OR_total,
OR_total - OR_comercio - OR_biodiesel,
OR_biodiesel - MOL*OR_massamolar,
M_insumo - 3*MOL*M_massamolar,
B_total - 3*MOL*B_massamolar,
G_comercio - MOL*G_massamolar,
S_insumo - S_capacidade,
OR_total - OR_capacidade,
B_total - B_capacidade,
S_comercio - S_demanda,
F_comercio** - F_demanda,
OB_comercio - OB_demanda,
OR_comercio - OR_demanda,
B_total - B_demanda
]
return objs, constrs
Yeah, it works. Thanks. Now I need to know how to plot the best result from this code:
for solution in algorithm.result: print(solution.objectives)
There is a way to know how is the best result from the list plotted. Also, I needed to know the same for the variables. I know that plot for them is:
for solution in algorithm.result: print(solution.variables)
This issue is stale and will be closed soon. If you feel this issue is still relevant, please comment to keep it active. Please also consider working on a fix and submitting a PR.