如何在CPLEX库中使用循环遍历参数并获取对应obj_lambda结果?
问题描述
我在PyCharm中使用numpy、pandas和CPLEX库,希望对total_r2中的多个r2输入参数进行循环计算,但无法获取每个参数对应的最终结果obj_lambda。
相关代码
import cplex from docplex.mp.model import Model import numpy as np import pandas as pd mdl = Model(name='Scheduling') inf = cplex.infinity bigM= 10000 Total_P = 11 # number of places Total_T = 8 # number of transitions AT_temp = AT.transpose() total_r2 = 5 storage_PS_one = [] storage_PS_two = [] storage_PS_three = [] storage_lambda = [] #Define the place without conflict place CP = np.count_nonzero(AT, axis=1, keepdims=True) #calculate the nonzero elements for each row P_conflict = [] P_zero = [] for a in range(0, len(CP)): if CP[a].item(0) > 2: P_conflict.append(places[a]) else: P_zero.append(places[a]) print(df_final) print('storage_lambda', storage_lambda)
修正方案
你的代码缺少核心的r2参数循环逻辑、模型求解步骤,以及结果存储的关键代码,以下是完整的修正框架:
- 添加r2参数循环:遍历目标参数范围(示例中按1到total_r2遍历,可根据实际需求调整)
- 循环内重建模型:每次循环创建新的Model实例,避免变量和约束累积冲突
- 补充模型核心定义:完善变量、约束、目标函数的定义(原代码缺失这部分)
- 求解并存储结果:求解后提取目标值存入storage_lambda列表
import cplex from docplex.mp.model import Model import numpy as np import pandas as pd total_r2 = 5 # 假设r2参数范围为1到5 storage_lambda = [] # 遍历每个r2参数 for r2 in range(1, total_r2 + 1): # 每次循环创建新模型实例 mdl = Model(name=f'Scheduling_r2_{r2}') inf = cplex.infinity bigM = 10000 Total_P = 11 Total_T = 8 # 确保AT、places变量已正确定义(原代码未给出,需补充) AT_temp = AT.transpose() CP = np.count_nonzero(AT, axis=1, keepdims=True) P_conflict = [] P_zero = [] for a in range(len(CP)): if CP[a].item(0) > 2: P_conflict.append(places[a]) else: P_zero.append(places[a]) # --- 补充模型变量、约束、目标函数定义 --- # 示例:定义决策变量、添加约束条件、设置obj_lambda对应的目标函数 # mdl.minimize(your_objective_expression) # 替换为你的目标函数 # 求解模型 solution = mdl.solve() if solution: obj_value = solution.get_objective_value() storage_lambda.append(obj_value) else: print(f"r2={r2}时模型求解失败") storage_lambda.append(None) # 输出所有参数对应的结果 print('storage_lambda', storage_lambda)
关键注意点:
- 必须每次循环重建Model,否则之前的变量和约束会残留导致错误
- 原代码中
AT、places、df_final变量未给出定义,需补充完整才能运行 - 目标函数的定义是获取obj_lambda的核心,需根据你的业务逻辑完善
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

