yalmip实用操作(2)

对于初学者而言,yalmip语言上手比较容易,深入比较难,有一些简单的约束条件处理对于我们处理实际模型问题有很大助益,跟大家分享一个如何生成n个元素连续的约束以及绝对值约束表达,在实际模型中,比如家庭能量管理里面洗衣机最小工作时间为1.5个小时,如果模型以0.5小时作为时间间隔,那么就需要连续3个时间段均处于工作状态。

目录

一、简单示例

二、具体分析

三、结果

四、实例代码


一、简单示例

按照上面的例子,如果一天时间按照0.5小时作为时间间隔,那么24小时存在变量数量就是48个,如果约束洗衣机在0:00-8:00之间电价谷期自动运行1.5小时,实现自动能量管理和家庭用电成本最小。具体代码如下:

    %洗衣机约束条件
    C = [C,sum(x_wm) == 3,sum(x_wm(1,1:16)) == 3];
    C = [C,sum(y_wm) == 1,sum(y_wm(1,1:15)) == 1];
    for i = 1:n
        if i ==1
            x_wm(1,i) = y_wm(1,i);
        elseif i == 2
            x_wm(1,i) = y_wm(1,i-1) + y_wm(1,i);
        else
            x_wm(1,i) = y_wm(1,i-2) + y_wm(1,i-1) + y_wm(1,i);
        end
    end

对于绝对值的约束表达,可以直接采用abs命令。

如在家庭能量管理中空调调节温度和室外温度存在热交换,可以采用下述约束方式:

    %空调约束条件
    for i = 1:n
        C = [C,25<=t_ac(1,i)<=27];
        if i == 1
            C = [C,abs(((t_ac(1,i)-27*exp(-0.5/(0.57*6)))/(1-exp(-0.5/(0.57*6)))-Tem_Out(1,i))/(2.9*6))<=2];
        else
            C = [C,abs(((t_ac(1,i)-t_ac(1,i-1)*exp(-0.5/(0.57*6)))/(1-exp(-0.5/(0.57*6)))-Tem_Out(1,i))/(2.9*6))<=2];
        end
    end

二、具体分析

上面的洗衣机约束代码中x_wm/y_wm是0-1变量,实现方式就是增加了另一个变量y_wm限定值为1,而x_wm则是三个相邻y_wm之和,然后限定x_wm之和为3,那么就保证了运转时间是连续的。

其实该约束也可以通过implies来实现,大家可以思考一下,可以通过下面的程序代码进行实现。

dd = binvar(14,1);
C=[C,sum(dd)==1,
    implies(dd(1),[x_wm(1)==1,x_wm(2)==1,x_wm(3)==1]),
    implies(dd(2),[x_wm(2)==1,x_wm(3)==1,x_wm(4)==1]),
    implies(dd(3),[x_wm(3)==1,x_wm(4)==1,x_wm(5)==1]),
    implies(dd(4),[x_wm(4)==1,x_wm(5)==1,x_wm(6)==1]),
    implies(dd(5),[x_wm(5)==1,x_wm(6)==1,x_wm(7)==1]),
    implies(dd(6),[x_wm(6)==1,x_wm(7)==1,x_wm(8)==1]),
    implies(dd(7),[x_wm(7)==1,x_wm(8)==1,x_wm(9)==1]),
    implies(dd(8),[x_wm(8)==1,x_wm(9)==1,x_wm(10)==1]),
    implies(dd(9),[x_wm(9)==1,x_wm(10)==1,x_wm(11)==1]),
    implies(dd(10),[x_wm(10)==1,x_wm(11)==1,x_wm(12)==1]),
    implies(dd(11),[x_wm(11)==1,x_wm(12)==1,x_wm(13)==1]),
    implies(dd(12),[x_wm(12)==1,x_wm(13)==1,x_wm(14)==1]),
    implies(dd(13),[x_wm(13)==1,x_wm(14)==1,x_wm(15)==1]),
    implies(dd(14),[x_wm(14)==1,x_wm(15)==1,x_wm(16)==1]), 
    ];

通过对比,是不是发现一些小技巧或者思考方式能够大幅提高编程效率,多掌握一种方法就会有多一种选择方式,在平时学习过程中要注意积累。

三、结果

能够看到洗衣机实现了此约束,完整程序可实现如下家庭能量管理调度,非常实用。

四、实例代码

家庭能量管理系统matlab-Matlab文档类资源-CSDN下载采用yalmip和cplex优化家庭电器出力,注释详尽清晰!更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/zhangxd212489/72112154?spm=1001.2014.3001.5503

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电力程序小学童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值