最近遇到整数变量与连续变量乘积的线性化处理问题,想着在网上找找处理方法,但是找到的都是0-1变量的处理。在受到0-1变量线性化处理技巧的启发后,我想出了一种整数变量线性化的通用处理方法,在此提出来供大家参考使用。
先用一个简单的数学规划问题来举例。x为整数变量,y为连续变量,目标函数中有非线性项xy。x所有可能的取值有{0,1,2,3,4},对于每一个x可能的取值赋予对应的一个0-1变量xi,当xi等于1,此时x取xi对应的整数值。例如,x2=1,那么x=3。由此可以得到x与xi的等式关系。由于所有的xi中只能有一个等于1,因此将所有xi相加,使其等于1。
由上述可知,xy便可以写成xi与y乘积的表达式。此时出现了新的问题,xi与y的乘积又是非线性项,但是好在xi是0-1变量,因此引入zi对每一个xiy进行线性化。0-1变量线性化细节此处不再详述。
将以上线性化过程产生的新约束条件加入原规划问题,整理后等到线性化后的规划问题,可以直接使用cplex、intlinprog等求解器求解。
编程验证,结果是正确的。
总结一下,对于任意的一个整数变量与连续变量的乘积项,都可以通过上述方法进行线性化处理。该方法的核心思路是引入0-1变量xi,将整数变量转化为若干0-1变量,再对0-1变量与连续变量的乘积线性化处理。