我有一个非线性最小化问题,它将连续变量和二进制变量组合作为输入。将其视为阀门的网络流量问题,可以控制吞吐量,并使用泵可以改变方向。
A"自然,"简约的表述可能是:
arg( min( f(x1,y2,y3) )) s.t.
x1 \in [0,1] //a continuous variable
y2,y3 \in {0,1} //two binary variables
目标函数是确定性的,但解决起来很昂贵。如果我放弃二元变量,Scipy的差分进化算法对我的问题来说是一种有用的解决方案(比流域跳跃更快收敛)。
已有一些证据可用with regard to the inclusion of integer variables in a differential evolution-based minimization problem。建议的方法将y2,y3转换为[0,1]中的连续变量x2,x3 \,然后修改目标函数如下:
(i) f(x1, round(x2), round(x3))
(ii) f(x1,x2,x3) + K( (x2-round(x2))^2 + (x3-round(x3))^2 )
with K a tuning parameter
第三种,可能是天真的方法是将二进制变量组合成[0,1]中的单个连续变量z \,从而减少优化变量的数量。
例如,
if z<0.25: y2=y3=0
elif z<0.5: y2=1, y3=0
elif z<0.75: y2=0, y3=1
else: y2=y3=1.
上面哪一个应该是首选,为什么?我非常想知道二进制变量如何以智能方式集成到连续差分进化算法(例如Scipy)中。非常感谢提前。
PS。我知道有一些文献可以提出专用的混合整数进化算法。现在,我想和Scipy呆在一起,除非这真的很愚蠢。