跳转到主要内容

关于线性化的问题

回答

评论

13个评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    嗨Buddi,

    请把准确的双线性项变量范围和线性化实现的吗?请注意,您发布的链接不工作。

    最好的问候,
    Jaromił

    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    你好Jaromil,

    这是特殊的线性约束。自我是Gurobi模型的一个实例。值是二进制,_z连续区间[0,1],e_high和e_low大m的我玩。

    self.addConstrs(自我。_z (i, j) < = e_high * quicksum(自我。值k (i, j, k)的自我。_type如果k = =“选举”)
    因为我在self._locations
    对j self._locations
    )

    self.addConstrs(自我。_z (i, j) > = e_low * quicksum(自我。值k (i, j, k)的自我。_type如果k = =“选举”)
    因为我在self._locations
    对j self._locations
    )

    self.addConstrs(自我。_z (i, j) < =(自我。_E (i, j) *自我。_b /自我。_efficiency +自我。_soc[我]——自我。_soc[j]) -
    e_low * (1 - quicksum(自我。值k (i, j, k)的自我。_type如果k = = '选择'))
    因为我在self._locations
    对j self._locations
    )

    self.addConstrs(自我。_z (i, j) > =自我。_E (i, j) *自我。_b /自我。_efficiency +自我。_soc[我]——自我。_soc [j]
    e_high * (1 - quicksum(自我。值k (i, j, k)的自我。_type如果k = = '选择'))
    因为我在self._locations
    对j self._locations
    )

    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    我也附上截图。

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    所以你想线性化

    (自我。_E (i, j) *自我。_b /自我。_efficiency +自我。_soc[我]——自我。_soc[j]) *
    quicksum(自我。值k (i, j, k)的自我。_type如果k = =“选举”)

    这是正确的吗?

    如果是的,那么它就会更容易处理的线性化如果引入辅助变量

    aux_cont = =(自我。_E (i, j) *自我。_b /自我。_efficiency +自我。_soc[我]——自我。_soc[j])
    aux_int = = quicksum(自我。值k (i, j, k)的自我。_type如果k = =“选举”)

    使用上面的辅助变量,您可以看到\ (\ texttt {aux_int} \)是一个整数变量范围\(\{0点\ \ sum_ {k} 1 \} \)和\ (\ texttt {aux_cont} \)是一个辅助变量和边界\ ([e_}{低,e_{高}]\)。所以你真的想线性化

    aux_cont * aux_int

    这是一个乘法的连续和一个整数变量,因此“二进制时间连续线性化不工作。

    一般来说,而不是线性的双线性项,你可以让Gurobi做这项工作。根据你其他的模型中,它可能是可能的,你必须设置非凸参数。

    最好的问候,
    Jaromił

    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    非常感谢。是的,我错过了,当我和二进制文件,它是一个整数值。
    我的帖子上面的进步。你看到双重束缚。到300年代,现任已经很好。我有强烈的怀疑,之前给你们的约束是罪魁祸首,因为这是自我的价值。_b几乎完全负责此时的最优性差距。没有其他(主要)约束涉及这个变量,除了一个又一个我写日志。

    解决与对偶单纯形(原始模型)

    0 0 0 195 1509.80081 1076.00000 1076.00000 28.7% - 88年代
    0 0 0 139 1509.80081 1076.00000 1076.00000 28.7% - 91年代
    H 0 0 1509.7998849 1076.00000 28.7% - 101 s
    0 0 0 127 1509.79988 1076.00000 1076.00000 28.7% - 104年代
    H 0 0 1509.7021733 1076.00000 28.7% - 112 s
    0 0 0 149 1509.70217 1076.00000 1076.00000 28.7% - 114年代
    0 0 0 135 1509.70217 1076.00000 1076.00000 28.7% - 124年代
    0 0 0 138 1509.70217 1076.00000 1076.00000 28.7% - 125年代
    0 0 0 148 1509.70217 1076.00000 1076.00000 28.7% - 138年代
    0 0 0 163 1509.70217 1076.00000 1076.00000 28.7% - 139年代
    0 0 0 148 1509.70217 1076.00000 1076.00000 28.7% - 152年代
    0 0 0 130 1509.70217 1076.00000 1076.00000 28.7% - 156年代
    0 0 0 174 1509.70217 1076.00000 1076.00000 28.7% - 173年代
    0 0 0 175 1509.70217 1076.00000 1076.00000 28.7% - 196年代
    H 0 0 1509.6942936 1076.00000 28.7% - 201 s
    0 0 0 190 1509.69429 1076.00000 1076.00000 28.7% - 203年代
    0 0 0 136 1509.69429 1076.00000 1076.00000 28.7% - 218年代
    0 0 0 182 1509.69429 1076.00000 1076.00000 28.7% - 222年代
    0 0 0 145 1509.69429 1076.00000 1076.00000 28.7% - 239年代
    0 0 0 187 1509.69429 1076.00000 1076.00000 28.7% - 245年代
    0 0 0 138 1509.69429 1076.00000 1076.00000 28.7% - 261年代
    0 0 0 163 1509.69429 1076.00000 1076.00000 28.7% - 262年代
    0 0 0 146 1509.69429 1076.00000 1076.00000 28.7% - 278年代

    变量定义:
    自我。_b = self.addVar (name = " b ")
    自我。_bi =自我。addVar(磅= 176,乌兰巴托=自我。_battery_size名称=“bi”)
    self.addConstr(自我。_b *自我。_bi = = 1)

    我看着一个智能提出了若干策略,但我有一些麻烦在搞清楚如何提高这个约束的配方,这样最好的绑定可以提高得更快。你有什么建议吗?

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    我看着一个智能提出了若干策略,但我有一些麻烦在搞清楚如何提高这个约束的配方,这样最好的绑定可以提高得更快。你有什么建议吗?

    因为这两个变量是连续的,你应该尽量提供严格的上下边界变量\ (b \)。然后,这两个变量\ (b \)和\ (bi \)有界,应该改善性能。

    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    谢谢你Jaromil。我尝试你的建议。

    H 0 0 1547.9138011 1400.00000 9.56% - 279 s
    1400.00000 0 2 0 35 1547.91380 - 1400.00000 9.56% - 282年代
    7日16 287年代1400.00000 - 3 223 1547.91380 1400.00000 9.56%
    15日26日1400.00000 - 4 36 1547.91380 1400.00000 - 9.56% 144 290年代
    H 35 46 1547.9054563 1400.00000 - 9.56% 113 304年代
    45 122 1400.00000 84 1547.90546 1400.00000 - 9.56% 117 314年代
    25 121 348 1400.00000 1547.90546 1400.00000 - 9.56% 191 337年代
    H 315 348 1547.9026785 1400.00000 - 9.56% 101 337年代
    337年代H 346 348 97.1 1540.4636923 1400.00000 9.12%
    348 997 1400.00000 1540.46369 97.7 1400.00000 - 9.12% 387年代
    387年代H 765 997 60.1 1540.4634987 1400.00000 9.12%
    387年代H 861 997 59.6 1540.4632668 1400.00000 9.12%
    387年代H 926 997 58.0 1510.1708333 1400.00000 7.30%

    最好的nrel启发式后立刻绑定1400是什么,它永远不会提高。

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    你的模型有多大?你能分享的LP或议员文件模型?你可以写你的模型文件通过方法。注意,在社区论坛上传文件是不可能的但我们讨论另一个发布到社区论坛。

    如果你不能分享你的模型,你能请的第一个~ 20行日志输出(或如果它不是超级长,只是整个日志输出)?

    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    请查收下面的日志输出。LP文件是可用的https://www.filemail.com/d/xsadvtceoialmei。

    线程数:10个物理核心,12个逻辑处理器,使用12线程

    优化模型与351369行、443590列和2546834 0
    xd5cd6d37模型指纹:0
    201422二次约束模型
    有680个通用约束模型
    变量类型:167938连续,275652整数(275652二进制)
    系数统计:
    矩阵范围(1 e-02, 2 e + 03)
    QMatrix范围[9 e-01 6 e + 01]
    花费的时间NoRel启发式:6 s(1400年最好的绑定)
    12.0107发现第一期的解决方案:放松
    12.0089发现第一期的解决方案:放松
    12.0064发现第一期的解决方案:放松
    10.0594发现第一期的解决方案:放松
    NoRel启发式的运行时间:11(1400年最好的绑定)
    6.03636发现第一期的解决方案:放松
    6.00048发现第一期的解决方案:放松
    发现第一期的解决方案:放松4
    花费的时间NoRel启发式:18岁(1400年最好的绑定)
    发现第一期的解决方案:放松2
    发现第一期的解决方案:放松0
    发现启发式解决方案:目标1904.0000000
    过渡到第二阶段
    发现启发式解决方案:目标1848.0444444
    NoRel启发式的运行时间:23年代(1400年最好的绑定)
    发现启发式解决方案:目标1848.0416667
    发现启发式解决方案:目标1840.1608854
    发现启发式解决方案:目标1838.9569444
    发现启发式解决方案:目标1831.4152778
    发现启发式解决方案:目标1831.4152503
    发现启发式解决方案:目标1786.3637787
    发现启发式解决方案:目标1779.7064027
    发现启发式解决方案:目标1769.4860215
    发现启发式解决方案:目标1738.6023457
    发现启发式解决方案:目标1732.4248063
    发现启发式解决方案:目标1723.4762510
    发现启发式解决方案:目标1723.0244058
    NoRel启发式的运行时间:29年代(1400年最好的绑定)
    发现启发式解决方案:目标1722.7594768
    发现启发式解决方案:目标1721.0040737
    发现启发式解决方案:目标1716.1249711
    发现启发式解决方案:目标1716.1249532
    发现启发式解决方案:目标1716.0259495
    发现启发式解决方案:目标1716.0123746
    发现启发式解决方案:目标1714.9370344
    发现启发式解决方案:目标1714.8304525
    发现启发式解决方案:目标1714.7277646
    花费的时间NoRel启发式:38年代(1400年最好的绑定)
    花费的时间NoRel启发式:46(1400年最好的绑定)
    发现启发式解决方案:目标1713.4013889
    发现启发式解决方案:目标1700.0000000
    花费的时间NoRel启发式:52年代(1400年最好的绑定)
    花费的时间NoRel启发式:58 s(1400年最好的绑定)
    NoRel启发式的运行时间:67年代(1400年最好的绑定)
    NoRel启发式的运行时间:76年代(1400年最好的绑定)
    确定性并发LP优化器:原始与对偶单纯形
    只显示第一个日志……


    根单工日志……

    迭代目标原始Inf。双正。
    0 1.6040000 2.085614 e + e + 03 01 2.759639 e + 10 77年代
    并发旋转时间:0.03秒

    解决与对偶单纯形

    根单工日志……

    迭代目标原始Inf。双正。
    965年1.4000000 e + 03 0.000000 0.000000 e + e + 00 00 77年代

    根放松:目标1.400000 e + 03 965迭代,0.17秒(0.19单位)

    当前节点节点| |客观界限|工作
    Expl Unexpl | Obj深度IntInf | |现任BestBd差距/节点时间

    1400.00000 0 0 0 28日1700.00000 - 1400.00000 17.6% - 78年代
    H 0 0 1573.2027778 1400.00000 11.0% - 78 s
    H 0 0 1556.1815818 1400.00000 10.0% - 80 s
    1400.00000 0 0 0 29日1556.18158 - 1400.00000 10.0% - 80 s
    H 0 0 1555.9731799 1400.00000 10.0% - 82 s
    H 0 0 1555.2870287 1400.00000 10.0% - 82 s
    H 0 0 1546.8884327 1400.00000 9.50% - 85 s
    1400.00000 0 0 0 26日1546.88843 - 1400.00000 9.50% - 85年代
    H 0 0 1511.4430422 1400.00000 7.37% - 85 s
    0 0 0 25 1511.44304 1400.00000 1400.00000 7.37% - 85年代
    1400.00000 0 0 0 37 7.37% 1511.44304 - 1400.00000 - 91年代
    H 0 0 1511.0000000 1400.00000 7.35% - 92 s
    36 0 0 0 1400.00000 1511.00000 1400.00000 7.35%——92年代
    H 0 0 1510.8966611 1400.00000 7.34% - 97 s
    42 0 0 1400.00000 0 1510.89666 1400.00000 7.34% - 97年代
    1400.00000 0 0 0 55 1510.89666 1400.00000 7.34% - 97年代
    1400.00000 0 0 0 33 7.34% 1510.89666 - 1400.00000 - 100年代
    0 - 112 2 1400.00000 0 31日1510.89666 - 1400.00000 7.34%
    4 H 1 1510.8960772 1400.00000 - 7.34% 985 115年代
    25 34 1400.00000 245 1510.89608 1400.00000 - 7.34% 479 120年代
    35 44 1400.00000 224 1510.89608 1400.00000 - 7.34% 524 129年代
    H 37 44 1510.8916234 1400.00000 - 7.34% 497 129年代
    H 44 44 1509.7111003 1400.00000 - 7.27% 422 129年代
    73 104 1400.00000 290 1509.71110 1400.00000 - 7.27% 285 132年代
    277 284 1400.00000 115 1509.71110 1400.00000 - 7.27% 194 144年代29
    H 278 284 1509.7092667 1400.00000 - 7.27% 193 144年代
    H 279 284 1509.7068256 1400.00000 - 7.27% 192 144年代
    30 41 287 482 1400.00000 1509.70683 1400.00000 - 7.27% 197 151年代
    H 366 482 1509.7041667 1400.00000 - 7.27% 176 151年代
    485 1480 1400.00000 33 131 1509.70417 1400.00000 - 7.27% 144 159年代
    1573 2067 1500.00000 61 65 72.7 1509.70417 1400.00000 7.27% 166年代
    178年代H 2255 2120 72.0 1509.7036943 1400.00000 7.27%
    178年代H 2256 2120 72.0 1509.6997513 1400.00000 7.27%
    2317 2122 1509.69975 1400.00000 - 7.27% 71.5 1400.00000 12 34 195年代
    2318 2123 1500.00000 165 37 213年代71.5 1509.69975 1400.00000 7.27%
    36 2319 2124 81 1400.00000 1509.69975 71.5 1400.00000 - 7.27% 221年代
    2320 2124 1400.00000 55 234年代38 71.4 1509.69975 1400.00000 7.27%

    非常感谢。

    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    我之前发送的链接坏了由于fulltop。

    下载链接:https://www.filemail.com/d/xsadvtceoialmei

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    你的模型是相当大的,有很多非凸平等。因此,预期的双重约束只会进行非常缓慢(!)。

    你的模型有以下限制

    qc1: [- x[0, 1,选举]* soc [0] + x[0, 1,选举]* soc [1]
    + 29.29444444444444 x[0, 1,选举]* b] = 0

    而不是使用这种二次等式约束,你可以使用一个指标约束

    model.addConstr ((x(0, 1,选出)= = 1)> > (- soc [0] + soc [1] + 29.29444444444444 * b = = 0))

    指标约束意味着如果\ (\ texttt {x[0, 1,选举]= = 1}\)然后,\ (\ texttt {- soc [0] + soc [1] + 29.29444444444444 * b = = 0} \),否则不是。这只适用,因为\ (\ texttt {x[0, 1,选举]}\)是一个二进制变量。

    这个想法可以应用到很多你的约束。

    然后,你有约束的形式

    qc63101: [x[0, 1,燃料]* soc [0] - x[0, 1,燃料]* soc [1]] = 0

    您可以再次使用指标约束来制定的

    model.addConstr ((x(0, 1,燃料)= = 1)> > (soc [0] - soc [1] = = 0))

    同样的概念也适用于剩余的二次约束的形式

    qc200741: [- x[0340年选举]* soc [0] + x[0340年选举]* soc [340]
    - x[0340年选举]* d_soc [340] + 60.96111111111111 x[0340年选举]* b]
    = 0
    0
  • Charitha Heendeniya
    Gurobi-versary
    合作者
    调查员

    谢谢你!我将试试。

    总之,我们可以说,指标约束执行比双线性和二次约束?

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    总之,我们可以说,指标约束执行比双线性和二次约束?

    通常情况下,是的。

    0

登录留下你的评论。