我正试图用CPLEX解决程序将一些代码从纯CPLEX转换为CVXPY。原始代码如下:
p = cplex.Cplex()
p.objective.set_sense(p.objective.sense.maximize)
obj = np.zeros(numCols)
for i in range(numSamples):
if labels[i] == 0:
for b in range(numBuckets):
obj[zv_ + b*numSamples + i] = C
else:
for b in range(numBuckets):
obj[zv_ + numBuckets*numSamples + b*numSamples + i] = 1
p.linear_constraints.add(rhs=rhs,senses=senses)
p.linear_constraints.set_names(zip(range(constraint_cnt),cnames))
lb = np.zeros(numCols)
ub = np.ones(numCols)
p.variables.add(obj = obj, lb = lb, ub = ub, columns=cols, types=types, names=names)
p.parameters.timelimit.set(maxtime)
p.solve()
sol = p.solution这是我将其转换为CVXPY语法的尝试:
import cvxpy as cp
obj = np.zeros(numCols)
for i in range(numSamples):
if labels[i] == 0:
for b in range(numBuckets):
obj[zv_ + b*numSamples + i] = C
else:
for b in range(numBuckets):
obj[zv_ + numBuckets*numSamples + b*numSamples + i] = 1
objective = cp.Maximize(sum(obj))我非常困惑的是CPLEX指定“rhs”以及“感官”的方式。这些应该是什么?
发布于 2019-04-18 21:03:58
constraints.add的CPLEX文档说:
感官必须是单字符字符串的列表,或者包含线性约束意义的字符串。每个条目必须是'G‘、'L’、'E‘和'R’之一,分别表示大于、小于、相等和范围约束。 rhs是一个浮动列表,指定每个线性约束的右侧。
CVXPY是一种建模语言,因此与其将含义指定为'G‘、'L’、'E',不如使用>=、<=和== (即Python比较操作符)。约束的右侧将是单个约束的数字(例如,Python float或int),或者可能是一组约束的numpy数组。
CVXPY 示例应该给您一个如何做事情的好主意。
https://stackoverflow.com/questions/55734831
复制相似问题