CPLEX优化模型输出全为零,请求问题排查帮助
湖泊水资源优化模型问题修正
问题背景
某湖泊初始有150单位水资源,每卖出1单位水可获得3美元收益,但月底需保证湖泊剩余水量不低于100单位,每低于1单位需支付5美元罚款;本月降雨将补充125单位水量(后续计划加入随机降雨设置)。
用户构建的模型运行后,售水量x、缺口量y及收益输出均为0,无法得到合理结果,以下是问题分析与修正方案:
用户原代码
!pip install cplex !pip install docplex from docplex.mp.model import Model from docplex.mp.environment import Environment env = Environment() env.print_information() mdl = Model() x = mdl.continuous_var(lb=None, ub=None, name=None ) y = mdl.continuous_var(lb=None, ub=None, name=None ) r1=mdl.add_constraint( 150-x+y+125 >= 100 ) s = mdl.solve() mdl.maximize( 3*x-5*y ) obj = mdl.objective_value print(x.solution_value) print(y.solution_value) print("* best objective is: {:g}".format(obj)) mdl.export("modelo_determinista_bajo.lp")
问题分析
- 求解顺序错误:先调用
solve()再定义目标函数,导致求解时模型无优化目标,默认返回零值解。 - 变量约束缺失:
- 售水量
x不能为负,需设置下界lb=0; - 缺口量
y是水量不足的部分,只能为非负数,需设置lb=0。
- 售水量
- 约束逻辑模糊:原约束
150-x+y+125 >=100没有明确“缺口量是剩余水量低于100的部分”的逻辑,未将缺口量与实际剩余水量的关联清晰化。
修正后的代码
!pip install cplex !pip install docplex from docplex.mp.model import Model from docplex.mp.environment import Environment env = Environment() env.print_information() mdl = Model(name="water_optimization") # 定义变量:x为售水量(非负),y为缺口量(非负) x = mdl.continuous_var(lb=0, name="water_sold") y = mdl.continuous_var(lb=0, name="water_deficit") # 约束:月底剩余水量 + 缺口量 >= 100 # 剩余水量 = 初始水量 - 售水量 + 降雨量 mdl.add_constraint(150 - x + 125 + y >= 100, "minimum_water_requirement") # 设置目标函数:最大化总收益(售水收益 - 罚款) mdl.maximize(3 * x - 5 * y) # 求解模型 s = mdl.solve() # 输出结果 if s: print(f"售水量x: {x.solution_value:.2f}") print(f"缺口量y: {y.solution_value:.2f}") print(f"最优收益: {mdl.objective_value:.2f}美元") else: print("模型无解") mdl.export("modelo_determinista_bajo.lp")
结果说明
修正后,模型会计算出最优解:初始水量加降雨共275单位,最多可卖出175单位(剩余100单位),此时收益为175×3=525美元,缺口量y=0,完全符合业务逻辑。
内容的提问来源于stack exchange,提问作者slow_learner
相关产品推荐
相关产品推荐

