目录
1 使用0-1变量将分段函数转换为线性约束
2 连续函数采用分段线性化示例
3 matlab程序测试
4 matlab测试结果说明
5 分段线性化应用
1 使用0-1变量将分段函数转换为线性约束
2 连续函数采用分段线性化示例
3 matlab程序测试
clc;clear all; gn=10;tn=1; x_pf=sdpvar(1, tn,'full'); Pgone=8; gw1=sdpvar(gn+1,tn,'full'); gz1=binvar(gn, tn,'full'); gl1=10/gn; for i=1:1 gl2(i,:)=0:gl1:10; end con=[]; con = [con, x_pf(1,:)==gl2(1,:).^2*gw1]; con = [con, gw1(1,:)<=gz1(1,:)]; for i=2:gncon = [con, gw1(i,:)<=gz1(i-1,:)+gz1(i,:)]; end con = [con, gw1(gn+1,:)<=gz1(gn,:)]; con = [con, sum(gw1)==ones(1,tn)]; con = [con, sum(gz1)==ones(1,tn)]; con = [con, Pgone(1,:)==gl2(1,:)*gw1]; con = [con, gw1>=0]; f=1; ops=sdpsettings('solver','cplex'); result=optimize(con,f,ops);
4 matlab测试结果说明
在上述测试程序中,Pgone是平方之前的变量,x_pf是平方项,为了测试运算效果,目标函数采用定值,这样就能验证约束是不是严格限制,上述程序将Pgone取值为8,最终得到x_pf得64,将Pgone改成5,则x_pf得25,可以看出,此分段线性化模型严格约束。
大家在测试过程中,可以调节gn的值,该值代表的是分段数量,调节该值能够发现,随着分段数量增多,分段线性化的精度也会越来越高,如,当Pgone=5,gn=3时,x_pf=27.78,随着gn增大,x_pf值也就更加精确。