matlab约束条件怎么写_matlab数组超过预设大小

matlab约束条件怎么写_matlab数组超过预设大小网上例子:假设我们要用matlab解决如下线性规划问题:max4x1+2×2+x3s.t.2×1+x2<=1×1+2×3<=2×1+x2+x3=1×1>=0x1<=1×2>=0x2<=1×3>=0x3<=2如果用yalmip的话,只需要如下简单几句:>>x=sdpva…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

网上例子:

假设我们要用matlab解决如下线性规划问题:

max 4×1 + 2×2 + x3

s. t. 2×1 + x2 <= 1

x1 + 2×3 <= 2

x1 + x2 + x3 = 1

x1 >= 0

x1 <= 1

x2 >= 0

x2 <= 1

x3 >= 0

x3 <= 2

如果用yalmip的话,只需要如下简单几句:

>> x = sdpvar(3, 1);

>> f = [4 2 1] * x;

>> F = set(2*x(1) + x(2) <= 1);

>> F = F + set(x(1) + 2 * x(3) <=

2);

>> F = F + set(x(1) + x(2) + x(3) ==

1);

>> F = F + set(0 <= x(1) <= 1) +

set(0 <= x(2) <= 1) + set(0 <= x(3) <= 2);

>> ops = sdpsettings(‘solver’, ‘lpsolve’,

‘verbose’, 2);

>> result = solvesdp(F, -f, ops);

如果你想用 cplex

求解器求解,只需要将以上的‘solver’参数的‘lpsolve’改成‘cplex’,其他任何地方都不需要做改动。

除此以外,yalmip还支持几乎所有其他的求解算法,在matlab下输入yalmiptest命令可以得到所有支持的算法以及它们的安装状态(其中cplex和lpsolve是我安装的,其他status为found的表示默认支持,not

found表示支持但matlab中还未安装):

运行这个代码,会在set处提示错误,查阅认为,可能新版yalmip不再用set函数,所以将原代码改为

x = sdpvar(3, 1);

f = [4 2 1] * x;

F = [2*x(1) + x(2) <= 1,x(1) + 2 * x(3)

<= 2];  %%%不再用set

F = [F,x(1) + x(2) + x(3) == 1];

F = [F, 0 <= x(1) <= 1, 0 <= x(2)

<= 1,0 <= x(3) <= 2];

ops = sdpsettings(‘solver’, ‘cplex’,

‘verbose’, 2);

result = solvesdp(F, -f, ops);

double(f)  %%显示结果

double(x)

运行成功,这个例子的结果是:

目标函数

f =

2.5000

变量

x =

0.5000

0

0.5000

具体有关约束条件F的设置,参见http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Commands.set

set is

obsolete and should not be used.

Simply use additions or concatenations to define constraints.

F = [x

>= 0, x

<= 32];

F = [F,

x^2 <= 1];

F = F + [y

<= 10, [x

y;y 1] >= 0];

F = F + [1 <=

z <= 5]

F = [F, [x z;z x+y] >= 0, norm([x;y]) <=

z]

C = [];

for i = 1:5

C = [C, x+y(i)+z(6-i) == i];

end

D = [F,C]

..

其他具体函数用法(可以忽略set):

1. 创建决策变量:

>> x = sdpvar(m, n [, option]):创建m*n的连续型决策变量矩阵,option是对矩阵的一些参数指定。

相应的,如果要创建整型或二值型决策变量,matlab语句分别为:

>> x = intvar(m, n, [option])

>> x = binvar(m, n, [option])

2. 添加约束:

>> F = set(constraint [, tag]):创建一个以constraint指定的约束,可选参数tag可以给该约束指定一个字符串标记。重要的是constraint的表达也非常简单,例如如果有 x1 + x2 + x3 <= 3 的约束,直接写:

>> x = sdpvar(3, 1);

>> F = set(x(1) + x(2) + x(3) <= 3, ‘cost bound1’);

如果要继续添加约束也非常简单,支持用+直接相连:

>> F = F + set(constraint1 [, tag1]);

>> F = F + set(constraint2 [, tag2]);……

例如,如果继续限制 x 只能取[0, 1]之间的值,则:

>> F = F + set(0 <= x <= 1, ‘upper and lower bound’);

一句话就搞定了,是不是非常简单。!

3. 参数配置

这个比较简单,语句如下:

>> ops = sdpsettings(option1, value1, option2, value2, ……)

例如语句

>> ops = sdpsettings(‘solver’, ‘lpsolve’, ‘verbose’, 2);

‘solver’ 参数指定程序用lpsolve求解器(如果已经安装,否则会报错),如果不指定 ‘solver’ 参数,他会根据决策变量类型自动挑选已安装的、最适合的求解器;’verbose’ 指定显示冗余度(冗余度越大,你就可以看到越详细的求解过程信息)。

4. 求解

这个也只有一句话:

>> result = solvesdp(F, f, ops) 求解一个数学规划(最小化)问题,该问题的目标函数由 f 指定,约束由 F 指定,ops指定求解参数,最后的结果存储在result结构体中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182496.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【织梦插件】xenu软件-网站url和死链提取工具免费下载[通俗易懂]

    【织梦插件】xenu软件-网站url和死链提取工具免费下载[通俗易懂]软件名称 xenu 软件作用 网站网址提取工具 适宜人群 SEO 网址 http://www.jingdouwang.cn/zygx/wzcj/278.html 软件简介:  XenuLinkSleuth可能是你所见功能最强大的网站死链接查询的软件了。使用方法简单,仅需要输入网站URL就可以完成死链查询。用户可直接查看死链和火炼,…

    2022年7月22日
    10
  • 排序二叉树的实现

    排序二叉树的实现在计算机科学中,二叉树是一种重要的非线性的数据结构。每个结点的度均小于等于2,通常子树称为左子树和右子树。而排序二叉树是二叉树中的一种,其满足:1.如左子树不为空,那么左子树上的结点的值都小于其根上的值;2.如右子树不为空,那么右子树上的结点的值都大于其根上的值;3.其子树也是一个排序二叉树。下面用递归的方式来插入一个结点来满足上述的要求:typedefstructNode{

    2022年7月25日
    8
  • eclipse导入maven工程pom.xml文件不起作用[通俗易懂]

    eclipse导入maven工程pom.xml文件不起作用[通俗易懂]导入硬盘中的maven工程时要确保import的是maven选项下的ExistingMavenPojects。接着要替换maven仓库的地址为自己定义的地址window->preference->maven->usersettings

    2022年5月23日
    41
  • 多图详解 DeepMind 的超人类水准星际争霸 AI 「AlphaStar」 …

    多图详解 DeepMind 的超人类水准星际争霸 AI 「AlphaStar」 …雷锋网(公众号:雷锋网)AI科技评论按:英国当地时间1月24日,DeepMind在伦敦组织线上直播,向全世界的游戏AI研究人员以及游戏爱好者们介绍自己的AI研发最新进展。参加直播的DeepMind研究人员是DeepMind团队联合研发负责人OriolVinyals和DavidSilver,后者也是Alph…

    2022年6月1日
    38
  • ext.apply()_函数evaluate的应用

    ext.apply()_函数evaluate的应用转载网址:http://www.cnblogs.com/yin-jingyu/archive/2011/07/30/2122176.htmlapply的用法:    Ext中apply及applyIf方法的应用apply及applyIf方法都是用于实现把一个对象中的属性应用于另外一个对象中,相当于属性拷贝。不同的是apply将会覆盖目标对象中的属性,而apply

    2022年7月28日
    2
  • lm算法的实现方法_信赖域算法

    lm算法的实现方法_信赖域算法完整文章请查看这里。转载请注明出处:本文来自learnhard的博客:http://www.codelast.com/ & http://blog.csdn.net/learnhard/,并保持文章的完整性。 LM算法可用于解决非线性最小二乘问题。多用于曲线拟合等场合。LM算法的实现并不难,这里不讨论使用MATLAB等工具直接得到结果的过程,使用那些工具对于算法编程能力的提高无任何益处。 LM算法

    2022年9月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号