加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

YALMIP使用心得:片断1

(2010-04-27 20:14:59)
标签:

yalmip

optimization

software

academic

杂谈

分类: 建模优化

1.sdpvar(n,n)默认是对称的;若要非对称的,用sdpvar(n,n,'full')

这一点很重要,你也许以为我很傻很天真地把这个常识写在这里,是不是把看客当傻瓜了。我负责任地告诉你,这是我使用过程中血的教训:我最近对一个问题进行建模,对模型、代码和数据进行了无数遍cheak,而且用cheakset对约束进行了详细分析,还是报“Primal_infeasible”,我于是开始怀疑自己的能力,欲死欲仙之时,我在YALMIP Wiki上又仔细读了读Johan Lofberg关于sdpvar的示例,忽然发现自己可能阴沟里翻船了---就像老衲当年企图把大于4G的matlab安装镜像文件放到一个FAT32盘上,后被热心网友提醒时的感觉一样一样的。

2.如何对多重求和符号formulation?

如约束中含有类似

http://s16/middle/50c15451485375dfb6a9f&690

的多重求和号。

方法1:矩阵操作(感谢Johan Lofberg的帮助--Thanks go to Johan Lofberg for his warm helps

    可以先构造一个系数矩阵K(m,n,l),按上面的公式对相应的元素赋值;对于变量X(m,n,l),可以按

                sum(sum(sum(K.*X)))

的方式对多重求和号forumulation.

方法2:for循环

    如果你用习惯了Cplex,你可能觉得方法1虽然高效,但从建模的过程看不够“代码直观”(我发明的这个词,意思时:从代码的角度看时直观的)。我尝试用for循环来把X的各项累加起来,做了一些初步的测试,也是没有问题的。如用以下代码:

    temp_var=0;

     for i=3:5

        for j=7:50

            for k=10:30

               temp_var=temp_var+k*X(i,j,k);

            end

        end

     end
     F=[F,temp_var<=560];

注:方法1和方法2对于目标函数同样适用。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有