关于线性化的问题
回答你好,
这可能是一个简单的问题,但我想真正了解什么是幕后。我试图使线性化产品二进制和连续变量之间。二进制变量也形成一个小团体,正因为如此,我写的产品连续变量y乘以小团体的总和,这仍然是一个二进制值。还要注意,在任何可行的条件下y的值应该为零,不管最优。
总的来说,linerization技术是根据这个参考。http://yetanothermathprogrammingconsultant.blogspot.com/2008/05/multiplication-of-continuous-and-binary.html
这篇文章强调大m的选择。既然我知道y应该在零附近,我试着值从0.01到1.0(+,-)和任何低于0.05(大约)模型变得不可行,如果我设置高一点就工作。谁能解释可能会发生什么?
问候
Buddi
-
嗨Buddi,
请把准确的双线性项变量范围和线性化实现的吗?请注意,您发布的链接不工作。
最好的问候,
Jaromił0 -
你好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 -
我也附上截图。
0 -
所以你想线性化
(自我。_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 -
非常感谢。是的,我错过了,当我和二进制文件,它是一个整数值。
我的帖子上面的进步。你看到双重束缚。到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 -
我看着一个智能提出了若干策略,但我有一些麻烦在搞清楚如何提高这个约束的配方,这样最好的绑定可以提高得更快。你有什么建议吗?
因为这两个变量是连续的,你应该尽量提供严格的上下边界变量\ (b \)。然后,这两个变量\ (b \)和\ (bi \)有界,应该改善性能。
0 -
谢谢你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 -
请查收下面的日志输出。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 -
我之前发送的链接坏了由于fulltop。
0 -
你的模型是相当大的,有很多非凸平等。因此,预期的双重约束只会进行非常缓慢(!)。
你的模型有以下限制
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]
= 00 -
谢谢你!我将试试。
总之,我们可以说,指标约束执行比双线性和二次约束?
0 -
总之,我们可以说,指标约束执行比双线性和二次约束?
通常情况下,是的。
0
请登录留下你的评论。
评论
13个评论