我的限制在鸭嘴兽中不起作用

问题描述

我发现我所有的限制都不起作用。像第一个限制一样:

S_total = S_comercio + S_insumo

例如,我代码的最佳结果未遵循该限制。我已经检查了与鸭嘴兽计算得出的S_comercio和S_insumo对应的和。因此,我需要对所有限制进行的操作才能在我的代码中起作用?

代码如下:

#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)]
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)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)