首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将“感官”和“rhs”从CPLEX转换为CVXPY

将“感官”和“rhs”从CPLEX转换为CVXPY
EN

Stack Overflow用户
提问于 2019-04-17 19:35:56
回答 1查看 535关注 0票数 1

我正试图用CPLEX解决程序将一些代码从纯CPLEX转换为CVXPY。原始代码如下:

代码语言:javascript
复制
    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语法的尝试:

代码语言:javascript
复制
    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”以及“感官”的方式。这些应该是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-18 21:03:58

constraints.add的CPLEX文档说:

感官必须是单字符字符串的列表,或者包含线性约束意义的字符串。每个条目必须是'G‘、'L’、'E‘和'R’之一,分别表示大于、小于、相等和范围约束。 rhs是一个浮动列表,指定每个线性约束的右侧。

CVXPY是一种建模语言,因此与其将含义指定为'G‘、'L’、'E',不如使用>=<=== (即Python比较操作符)。约束的右侧将是单个约束的数字(例如,Python floatint),或者可能是一组约束的numpy数组。

CVXPY 示例应该给您一个如何做事情的好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55734831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档