My restrictions does not working
Hi, I discovered that all my restrictions does not working. Like the first restriction:
S_total = S_comercio + S_insumo
The best results from my code does not follow that restriction, for example. I already checked with a corresponding sum to S_comercio and S_insumo calculated from Platypus. So, what I need to do to all my restrictions work in my code??
Here is the code:
#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, unique, nondominated
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]
objs = [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]
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
problem = Problem(13, 1, 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
problem.directions[:] = Problem.MAXIMIZE
algorithm = NSGAII(problem)
algorithm.run(1000)
for solution in algorithm.result:
print(solution.objectives)
for solution in algorithm.result:
print(solution.variables)
for solution in unique(nondominated(algorithm.result)):
print(solution.objectives)
for solution in unique(nondominated(algorithm.result)):
print(solution.variables)
Also print out solution.constraints and/or solution.feasible. I would guess that you would see the solutions you're getting are not feasible (violate one or more constraints). The first thing I would look at is increasing the NFE beyond 1000 as it's likely these algorithm's haven't yet converged.
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.