【发布时间】:2021-02-24 06:10:30
【问题描述】:
我正在尝试使用 CPLEX 创建优化模型。
我的问题是:
我有生产产品的需求、生产能力(按机器计算)和生产成本(按机器计算)。 有些机器生产相同产品的成本和生产能力不同。
我正在尝试建立一个优化模型,在生产需求产品的同时最大限度地降低生产成本。
使用下面的代码,我得到了错误 错误:模型是非凸的
import pandas as pd
dmd = {
'TONS_BY_MONTH': {'PRODUCT_A': 27283.781, 'PRODUCT_B': 119.477, 'PRODUCT_C': 4651.003}
}
df_demanda = pd.DataFrame(dmd)
df_demanda
custo = {
'MC05': {'PRODUCT_A': 1368, 'PRODUCT_B': 1368, 'PRODUCT_C': 1368},
'MC06': {'PRODUCT_A': 1435, 'PRODUCT_B': 1435, 'PRODUCT_C': 1427},
'MC07': {'PRODUCT_A': 1189, 'PRODUCT_B': 1207, 'PRODUCT_C': 0},
'MC08': {'PRODUCT_A': 1221, 'PRODUCT_B': 1209, 'PRODUCT_C': 0},
'MC09': {'PRODUCT_A': 1905, 'PRODUCT_B': 1907, 'PRODUCT_C': 1965}
}
df_custo = pd.DataFrame(custo)
df_custo
produtos = ['PRODUCT_A', 'PRODUCT_B', 'PRODUCT_C']
maquinas = ['MC05','MC06','MC07','MC08','MC09']
dias = list(range(1,30))
capacidade = {
'MC05': {'PRODUCT_A': 371, 'PRODUCT_B': 371, 'PRODUCT_C': 427},
'MC06': {'PRODUCT_A': 396, 'PRODUCT_B': 396, 'PRODUCT_C': 435},
'MC07': {'PRODUCT_A': 547, 'PRODUCT_B': 571, 'PRODUCT_C': 0},
'MC08': {'PRODUCT_A': 476, 'PRODUCT_B': 497, 'PRODUCT_C': 0},
'MC09': {'PRODUCT_A': 657, 'PRODUCT_B': 692, 'PRODUCT_C': 790}
}
df_capacidade = pd.DataFrame(capacidade)
df_capacidade
from docplex.mp.model import Model
mdl = Model(name="DEMANDA_BY_DAY")
x = {(i,j):
mdl.continuous_var(name="PRODUCAO_{0}_{1}".format(i,j)) for i in produtos for j in maquinas }
DIAS = {(d):
mdl.binary_var(name="DIA_{0}".format(d)) for d in dias}
mdl.minimize(mdl.sum([ DIAS[d] * (df_custo.loc[i,j] * x[(i,j)]) for d in dias for i in produtos for j in maquinas]))
for i in produtos:
mdl.add_constraint( mdl.sum([x[(i,j)] * DIAS[d] for d in DIAS for j in maquinas ]) == df_demanda.loc[i,'TONS_BY_MONTH'])
for i in produtos:
mdl.add_constraint( mdl.sum([x[(i,j)] * DIAS[d] for d in DIAS for j in maquinas ]) <= mdl.sum([df_capacidade.loc[i,s] for s in maquinas]))
mdl.solve(log_output=True)
【问题讨论】:
标签: optimization cplex docplex