MATLAB入门——线性规划、非线性规划、多目标规划

4-1 线性规划_哔哩哔哩_bilibili

4-2 非线性规划_哔哩哔哩_bilibili

4-3 多目标规划_哔哩哔哩_bilibili

1.线性规划

有限条件下,最大收益

1. 例题

例题:张麻子既要攻碉楼又要追替身,他们一伙6人,总共1200发子弹;每有一人攻确楼会给百姓带来40点士气值,每有一人追替身会给百姓带来30点士气值;攻碉楼每人需240发子弹,追替身每人需120发。4问攻碉楼和追替身各派几个人,能使百姓的士气值最大?


解:
设派x_{1}人攻碉楼,排x_{2}人追替身,百姓士气值为y;

士气值最大:max  y=40x_{1}+30x_{2}

总共6人:x_{1}+x_{2}\leq 6;

既要攻碉楼又要追替身:x_{1}\geq 1,x_{2}\geq 1;

 子弹有限:则240x_{1}+120x_{2}\leq 1200;


 2. 代码实现

2.1 Linprog函数

模型化为matlab标准型:目标函数最小值、约束条件小于等于号或等号;(如果求最大值,约束条件有大于等于——>求最小值后求反)

  •  [x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)
  •  x返回最优解的变量取值,fval返回目标函数的最优值;

 

 2.非线性规划

  •  线性规划:所有变量都是一次方;
  • 非线性规划:至少一个变量不是一次方;

2.1 代码实现

 函数求解:

  • [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
  • x得到决策变量取值,fval得到最优解取值

本题:设好后fun和nonlcon函数文件以及其他参数后,执行:

[x,y]=fmincon('fun1',[0;0;0],[],[],[],[],[0;0;0],[],'fun2')

 

 3.多目标规划

3.1 例题

 

3.2 概念

需要衡量每个目标的完成情况,并主观上区分三个目标的重要性,使得整体的完成情况尽量好
引入三个概念:正负偏差绝对约束目标约束,优先因子

3.2.1  绝对约束和目标约束

  • 绝对约束是模型中自带的约束条件,必须满足,否则是不可行解
  • 例如2x_{1}+x_{2}\leq 11,使用材料的数量不能超过总共数量

3.2.2 目标约束

  • 目标约束是模型中对不等式右端追求的值允许有偏差
  • 目标3:尽可能使利润不少于56万,也就是z=8x_{1}+10x_{2}\geq 56,但允许有偏差
  • 这个“偏差”就是加入正负偏差变量,变成:8x_{1}+10x_{2}+d_{i}^{-}-d_{i}^{+}=56

 3.2.3 优先因子

1.尽量使产品I的产量不超过产品II的产量; 2.尽可能充分利用所有设备; 3.尽可能使利润不少于56万
这三者到底哪个重要?需要主观上确定优先因子P_{k}
例如,我认为目标3最重要,给他优先因子是10;目标2第二重要,给他优先因子5; 目标1第三重要,给它优先因子是1。那么三个目标重要性之比是10: 5: 1
 

第一目标要求不超过目标值,一位置正偏差变量d_{1}^{+}越小越好

 3.3 解题

需要衡量每个目标的完成情况,并主观上区分三个目标的重要性,使得整体的完成情况尽量好

  • 把所有的目标约束都加上d_{i}^{-}-d_{i}^{+}变成灯饰(注意,绝对约束也可以这样做变成等式,视情况而定)
  • 按照需求,主观确定确定优先因子P_{k}

 得到多目标规划模型:

 求解方法:fgoalattain函数;或序贯算法;或用Lingo求解

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
多目标非线性规划Matlab中可以使用`gamultiobj`函数进行求解。`gamultiobj`函数是一个多目标优化算法,基于NSGA-II(非支配排序遗传算法)来解决多目标规划问题。它可以通过设置目标函数和约束条件来找到一组最优解,这些解在不同目标之间达到了平衡。 使用`gamultiobj`函数求解多目标非线性规划问题的步骤如下: 1. 定义目标函数:根据具体问题,将多个目标函数定义为一个向量形式。 2. 定义约束条件:根据问题的限制条件,定义约束函数,将问题转化为一个带有约束的优化问题。 3. 设置参数:设置算法的迭代次数、种群大小、交叉概率、变异概率等。 4. 调用`gamultiobj`函数:使用定义好的目标函数、约束函数和参数来调用`gamultiobj`函数进行求解。 5. 获取结果:根据求解结果,得到一组最优解的集合。 示例代码如下: ```matlab % 定义目标函数 function f = objectives(x) f(1) = x(1)^2 + x(2)^2; % 第一个目标函数 f(2) = (x(1)-1)^2 + x(2)^2; % 第二个目标函数 end % 定义约束函数 function [c, ceq = constraints(x) c = x(1) + x(2) - 1; % 不等式约束 ceq = []; % 等式约束 end % 设置参数 options = optimoptions('gamultiobj', 'PopulationSize', 100, 'MaxGenerations', 100); % 调用gamultiobj函数求解 [x, fval = gamultiobj(@objectives, 2, [], [], [], [], [], [], @constraints, options); % 输出结果 disp('最优解:'); disp(x); disp('目标函数值:'); disp(fval); ``` 以上示例代码中,`objectives`函数定义了两个目标函数,`constraints`函数定义了一个不等式约束。`gamultiobj`函数根据设置的参数进行迭代求解,并返回最优解和目标函数值。 请注意,具体的多目标非线性规划问题需要根据实际情况进行定义和求解。以上示例仅供参考,具体问题的求解方法可能会有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [数模3—Matlab线性规划非线性规划多目标规划(超全解法合集)](https://blog.csdn.net/qq_52626583/article/details/126808946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MUTA️

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

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

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

打赏作者

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

抵扣说明:

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

余额充值