簡體   English   中英

添加約束 CPLEX Python API

[英]Adding constraints CPLEX Python API

我正在處理的數據並不像文檔中的數據那么簡單。 由於我的變量基本上取決於數據輸入文件,我將使用以下簡單示例來解釋我要實現的目標。 我有以下限制:

x1 + x2 + x3 = 1
x4 + x5 + x6 + x7 =1
x8 + x9 = 1

我正在考慮使用 for 循環重復調用c.linear_constraints.add()函數。 有沒有更好的方法來做到這一點?

一般來說,如果您創建一批線性約束而不是一次創建一個,您將獲得更好的性能。 例如(使用上面的示例),最好執行以下操作:

import cplex
c = cplex.Cplex()
c.variables.add(names=["x{0}".format(i+1) for i in range(9)])
c.linear_constraints.add(lin_expr=[[[0, 1, 2], [1.0, 1.0, 1.0]],
                                   [[3, 4, 5, 6], [1.0, 1.0, 1.0, 1.0]],
                                   [[7, 8], [1.0, 1.0]]],
                         rhs=[1.0, 1.0, 1.0],
                         names=["c{0}".format(i+1) for i in range(3)])
c.write("example.lp")

這將生成以下 LP 文件:

Minimize
 obj:
Subject To
 c1: x1 + x2 + x3  = 1
 c2: x4 + x5 + x6 + x7  = 1
 c3: x8 + x9  = 1
End

因此,最好讀入您的輸入文件,將約束信息保存在某些數據結構(列表或其他)中,然后在最后調用c.linear_constraints.add一次(如果您的輸入文件非常大的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM