You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:35:18