【问题标题】:How to use complex variables in a Gurobi problem如何在 Gurobi 问题中使用复变量
【发布时间】:2020-01-14 16:50:51
【问题描述】:

我目前在 MATLAB 上使用 CVX + Mosek 解决复杂变量的优化问题。我现在正在考虑为某些应用程序切换到 Gurobi + Python。

  1. 有没有办法在 Gurobi 的 Python 接口中直接声明复杂值(包括约束内部和优化变量)?

  2. 如果不是,哪些是良好的建模语言,具有 Python 接口,可以在调用求解器之前自动将问题简化为实变量?

例如,我知道YALMIP does this reduction(虽然没有Python接口)和newer versions of CVXPY also(但我没有广泛使用它,不知道它是否已经有很好的性能,是否稳定,以及相当完整)。因此,欢迎对这些问题提出任何想法和其他接口的建议。

【问题讨论】:

    标签: python mathematical-optimization complex-numbers gurobi


    【解决方案1】:

    Gurobi 中唯一的 possible variables 是:

    • 整数;
    • 二进制;
    • 连续;
    • 半连续和;
    • 半整数。

    另外,我不知道你要解决的问题,但复数对于线性优化来说很奇怪。

    The complex plane isn't a ordered field,所以不可能说给定的复数 z1 > z2

    您可能必须以这样一种方式对您的问题进行建模,以便您可以用实部和虚部分解约束,这样您就可以只使用实数。

    【讨论】:

    • 我认为发帖者的意思是一些决策变量(和数据)很复杂,而不是目标函数很复杂。有时它可以很容易地手动映射到 R^2,但在其他情况下它会变得混乱。 CVXPY(和 YALMIP)是我所知道的少数支持复数的建模工具之一。 CVXPY 当然会坚持一个真正有价值的目标。
    • 这确实是我的意思。你的回答解决了我的问题。作为对任何人未来参考的补充,CVXPY 有一个 Reductions API,在其中有一个 Complex2Real 类,该类具有提升复杂变量的方法。在声明具有复杂变量的问题时会自动调用它们,并在调用求解器之前将问题转换为等效但纯真实的问题。我现在会坚持下去。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多