【问题标题】:Using the values of variable in the objective function before optimizing: Python Gurobi在优化之前使用目标函数中的变量值:Python Gurobi
【发布时间】:2021-09-21 03:22:53
【问题描述】:

我面临一个问题,即在目标函数中乘以一个术语。我的目标函数是:

\begin{equation}
    min \sum_{t=1}^T p_{t} * (1+r) * y_{t}    
\end{equation}

其中 $p$ 是价格,$y$ 是数量(决策变量),$r$ 是价格附加费。 $t$ 是时间段的索引。

问题在于 $r$ 的值取决于 $y$(决策变量)的值位于哪个区间,如以下分段函数所示。

\begin{equation}
    \r_t (Y_t) = 
    \begin{cases}
        % s_0
        0 & \mathrm{if }\; Y_t \leq b_0 \\
        % s_1
        0.05 & \mathrm{if }\; b_0 < Y_t \leq b_1 \\
        % s_2
        0.1 & \mathrm{if }\; b_1 < Y_t \leq b_2\\[6pt]
        ... & \mathrm{if }\; ...
    \end{cases}
\end{equation}

其中 $b_0$、$b_1$ 等是一组数量区间 = [0, 50, 100, 150,..]

因为我们没有 $y$ 的值,直到指定目标函数(因为决策变量的值),只有在我们调用优化 m.optimize() 时才可用。那么,我们如何在 Python 接口中对此进行编程。

任何线索都将受到高度赞赏。提前致谢。

【问题讨论】:

    标签: python optimization gurobi


    【解决方案1】:

    据我了解,r_t(Y_t) 是 Y_t 特定值的常数,因此(1-r_t)*Y_t 是分段线性函数。您应该使用 Gurobi 中的分段线性目标功能;其他一些求解器也有类似的功能。

    【讨论】:

    • 您能否提供有关如何在 Gurobi 中使用分段线性目标来解决此问题的任何线索。我正在努力形成一个,无法与参考示例联系起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多