MATLAB:优化与规划问题

news2024/9/20 19:35:03

一、线性规划

 

% 线性规划(Linear programming, 简称LP)
fcoff = -[75 120 90 105]; % 目标函数系数向量
A = [9 4 7 5
     4 5 6 10
     5 10 8 5
     3 8 9 7
     7 6 4 8]; % 约束不等式系数矩阵
b = [3600 2900 3000 2800 2200]'; % 约束不等式右端向量
Aeq = []; % 约束等式系数矩阵
beq = []; % 约束等式右端向量
lb = 50*ones(4,1); % 决策变量下限
ub = []; % 决策变量上限
options = optimoptions('linprog','Algorithm','dual-simplex','Display','iter'); % dual-simplex单纯性法
[x,fval,exitflag,output,lambda] = linprog(fcoff,A,b,Aeq,beq,lb,ub,options)
fval = - fval

 

fcoff = [2 1 3 2 1 3 4 1 3 2 1 3 2 1 1 2 1 3 2 2]'; % 按一列一列录入
A = [1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
     0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
     0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
     0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1];
% A1 = repmat(eye(4),1,5)
b = [60 40 50 55]';
Aeq = [1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
       0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1];
beq = [20 35 33 34 30]';
lb = zeros(20,1);
% options = optimoptions('linprog','Algorithm','interior-point'); % interior-point内点法
options = optimoptions('linprog','Algorithm','dual-simplex'); % dual-simplex单纯性法
[x,fval,exitflag,output,lamda] = linprog(fcoff,A,b,Aeq,beq,lb,[],options)
x = reshape(x,4,5)

二、二次规划

H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];
lb = [0; 0];
options = optimoptions('quadprog','Algorithm','interior-point-convex','Display','iter');
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],[],options) % 若不加options,则可以省略x0

 三、混合整数(非)线性规划

intcon: int condition

决策变量0-1问题:

fcoff = [-10 -11 -8 -12 -15 -12 -5];
intcon = 1:7;
A = [103 140 95 150 193 160 80; 
     1 1 1 0 0 0 0; 
     0 0 0 -1 -1 0 0; 
     0 0 0 0 0 -1 -1];
b = [650;2;-1;-1];
Aeq = [];
beq = [];
lb = zeros(7,1); 
ub = ones(7,1); 
[x,fval,exitflag] = intlinprog(fcoff,intcon,A,b,Aeq,beq,lb,ub)
maxf = -fval

function [x,fval,exitflag] = intlinprog_ex2()
    designate_data = xlsread('designate.xlsx',1,'B2:H8');
    fcoff = designate_data(:); % 目标函数系数向量
    intcon = 1:49;
    A = [];
    b = [];
    Aeq1 = zeros(7,49);
    for i = 1:7
        Aeq1(i,(i-1)*7+1:i*7) = 1; % 起点1 8 15 22...,终点7 14 21 28...
    end
    Aeq2 = repmat(eye(7),1,7);
    Aeq = [Aeq1;Aeq2];
    beq = ones(14,1);
    lb = zeros(49,1);
    ub = ones(49,1);
    [x,fval,exitflag] = intlinprog(fcoff,intcon,A,b,Aeq,beq,lb,ub);
    x = reshape(x,7,7);
end

function [C,Ceq] = stBNB_fun1(x)
    Ceq = []; % 非线性约束等式
    % C表示非线性约束不等式
    C = [x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2 + x(1) - x(2) + x(3) - x(4) - 8;
         x(1)^2 + 2*x(2)^2 + x(3)^2 + 2*x(4)^2 - x(1) - x(4) - 10;
         2*x(1)^2 + x(2)^2 + x(3)^2 + 2*x(4)^2 - x(2) - x(4) - 5];
end
objfun = @(x)x(1)^2+x(2)^2+2*x(3)^2+x(4)^2-5*x(1)-5*x(2)-21*x(3)+7*x(4);
x0 = zeros(4,1); % 初值
xstat = ones(4,1); % 都是整数
[errmsg,objval,objX,t,c,fail] = BNB20_new(objfun,x0,xstat,[],[],[],[],[],[],@stBNB_fun1)

objfun = @(x)5*x(4)+6*x(5)+8*x(6)+10*x(1)-7*x(3) - 18*log(x(2)+1)-19.2*log(x(1)-x(2)+1)+10;
x0 = zeros(6,1);
xstat = [0 0 0 1 1 1]';
lb = [0 0 0 0 0 0]';
ub = [2 2 1 1 1 1]';
A = [-1 1 0 0 0 0;0 1 0 -2 0 0;1 -1 0 0 -2 0;0 0 0 1 1 0];
b = [0 0 0 1]';
Aeq = [];
beq = [];
[errmsg,objval,objX,t,c,fail] = BNB20_new(objfun,x0,xstat,lb,ub,A,b,Aeq,beq,@stBNB_fun2)

四、有约束非线性规划

nonlcon: nonlinear condition 

x0 = [-1;0.5];
Aeq = [1,2];
beq = [0];
options = optimoptions('fmincon','Display','iter','Algorithm','interior-point');
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(@objfmincon_1,x0,[],[],Aeq,beq,[],[],@nlincon_fun1,options)

d = [640,850,530,72]; % 目标距离
Ao = (d/2 + d/4 + 200); %飞机携带A炸弹分别摧毁4个目标所需要的油量
Bo = (d/3 + d/4 + 200); %飞机携带B炸弹分别摧毁4个目标所需要的油量
D = [Ao;Bo]; 
D = D(:)'; % 第一个约束条件的系数行向量
objfun = @(x)(1-0.65)^x(1)*(1-0.76)^x(2)*(1-0.50)^x(3)*(1-0.70)^x(4)*...
         (1-0.56)^x(5)*(1-0.72)^x(6)*(1-0.68)^x(7)*(1-0.66)^x(8);
x0 = zeros(8,1);
A = [D;1 0 1 0 1 0 1 0;
       0 1 0 1 0 1 0 1;
       1 1 0 0 0 0 0 0; 
       0 0 1 1 0 0 0 0;
       0 0 0 0 1 1 0 0;
       0 0 0 0 0 0 1 1;
      -1 -1 0 0 0 0 0 0; 
       0 0 -1 -1 0 0 0 0;
       0 0 0 0 -1 -1 0 0;
       0 0 0 0 0 0 -1 -1];
b = [2700;4;4;2;2;2;2;-1;-1;-1;-1];
Aeq = [];
beq = [];
lb = zeros(8,1);
ub = [];
nonlcon = [];
options = optimoptions('fmincon','Algorithm','interior-point');
[x,fval,exitflag,output,lambda,grad] = fmincon(objfun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
x = reshape(x,2,4)
p = 1 - fval

x = [2:0.5:6];
y = [4.1 3.8 3.4 3.2 2.9 2.8 2.5 2.2 2.0];
plot(x,y,'r-*')
grid on
title('售价与预期销售量散点图')
xlabel('售价')
ylabel('预期销售量')
% y = a*x + b
py = polyfit(x,y,1)

z = [0:7];
k = [1 1.4 1.7 1.85 1.95 2 1.95 1.8];
figure
plot(z,k,'b-*')
grid on
title('广告费与销售增长因子散点图')
xlabel('广告费')
ylabel('销售增长因子')
% k = c*z^2 + d*z + e
pk = polyfit(z,k,2)

% x(1)-->x, x(2)-->z
objf = @(x)-((py(1)*x(1)+py(2))*(pk(1)*x(2)^2+pk(2)*x(2)+pk(3))*(x(1)-2)-x(2));
lb = [2;0];
x0 = [3;2];
options = optimoptions('fmincon','Algorithm','interior-point');
[x,fval,exitflag,output,lambda,grad] = fmincon(objf,x0,[],[],[],[],lb,[],[],options)

五、半无限多元函数约束问题

fseminf

六、多目标规划问题

 

mobjf = @(x)[[36.9,35.8,24.9,29.9,45.8]*x;[-1,-1,-1,-1,-1]*x]; % 两个目标函数
x0 = ones(5,1);
goal = [1850,-55];
weight = [0.8,0.2];
A = [-1 -1 0 0 0
      0 0 0 -1 -1];
b = [-23;-20];
Aeq = [];
beq = [];
lb = 8*ones(5,1);
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(mobjf,x0,goal,weight,A,b,Aeq,beq,lb)
% attainfactor为达到因子,以实数形式返回。attainfactor 包含解处的 γ 值。
% 如果 attainfactor 为负,则目标过达到
% 如果 attainfactor 为正,则目标欠达到

mobjf = @(x)[-[70 120]*x;-[400 600]*x;[3 2]*x];
x0 = ones(2,1);
goal = [-3900,-20000,80]; 
weight = [0.3 0.3 0.4]; 
A = [9 4;4 5;3 10];
b = [240;200;300];
lb = [8;8];
[x,fval,attainfactor,exitflag] = fgoalattain(mobjf,x0,goal,weight,A,b,[],[],lb)

plan = xlsread('planning.xlsx',1,'B2:M5');
invest = plan(1,:); % 投资
profit = plan(2,:); % 利润
waste = plan(3,:); % 废物
labour = plan(4,:); % 劳动力
mobjf = @(x)-[profit*x;labour*x]; % 目标函数,最大值转化为最小值
x0 = zeros(12,1); % 初值选择
lb = zeros(12,1); % 决策变量下限
ub = ones(12,1); % 决策变量上限
goal = -[sum(profit);sum(labour)]; %目标
% goal = -[20.74;14.86]; % 通过线性规划求解在满足约束条件下的目标值
weight = abs(goal); % 权重
A = [invest;waste]; % 线性约束不等式系数矩阵
b = [80;20]; % 线性约束不等式右端向量
options = optimoptions('fgoalattain','Display','iter','MaxIterations',100,'ConstraintTolerance',1e-8);
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(mobjf,x0,goal,weight,A,b,[],[],lb,ub,[],options)

 七、极小化极大问题

nonlcon: 定义非线性等式和不等式 

% Minimax一般是寻找一个局部最优解而不是全局最优解
lb = [5;5];
ub = [8;8];
x0 = [1;1];
[x,fval,maxfval,exitflag,output] = fminimax(@fminimax_fun1,x0,[],[],[],[],lb,ub)

objf = @(x)sqrt([(x(1)-1.5)^2+(x(2)-6.8)^2;
                 (x(1)-6.0)^2+(x(2)-7.0)^2; 
                 (x(1)-8.9)^2+(x(2)-6.9)^2;
                 (x(1)-3.5)^2+(x(2)-4.0)^2; 
                 (x(1)-7.4)^2+(x(2)-3.1)^2]); 
x0 = [0;0];
Aeq = [1 -1];
beq = [2.5];
[x,fval,maxfval,exitflag,output] = fminimax(objf,x0,[],[],Aeq,beq)

 八、线性约束最小二乘问题

lsqlin: Solve constrained linear least-squares problems. 

C = [0.9501 0.7620 0.6153 0.4057
     0.2311 0.4564 0.7919 0.9354
     0.6068 0.0185 0.9218 0.9169
     0.4859 0.8214 0.7382 0.4102
     0.8912 0.4447 0.1762 0.8936];
d = [0.0578 0.3528 0.8131 0.0098 0.1388]';
A = [0.2027 0.2721 0.7467 0.4659
     0.1987 0.1988 0.4450 0.4186
     0.6037 0.0152 0.9318 0.8462];
b = [0.5251 0.2026 0.6721]';
Aeq = [3 5 7 9];
beq = 4;
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);
x0 = rand(4,1);
options = optimoptions('lsqlin','Algorithm','interior-point','Display','iter');
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)

九、动态规划 

dynprog

十、智能优化算法

1、遗传算法

nonlcon: 定义非线性等式与不等式  

fh = @(x)-(x.*sin(10*pi*x) + 2);
fplot(fh,[-1,2])
% fmincon
v = [];
xi = [-1:0.8:1.5,1.5:0.1:2];
for x0 = xi
    solx = fmincon(fh,x0,[],[],[],[],-1,2);
    v = [v;x0,solx,-fh(solx)];
end

options = optimoptions('ga','Display','iter');
[x,fval] = ga(fh,1,[],[],[],[],-1,2,[],options)

fmin = @(x)5*x(4)+6*x(5)+8*x(6)+10*x(1)-7*x(3)-18*log(x(2)+1)-19.2*log(x(1)-x(2)+1)+10;
nvars = 6; % 决策变量的个数
intcon = [4,5,6]; % 取整决策变量下标
ub = [2 2 1 1 1 1]';
lb = [0 0 0 0 0 0]';
A = [-1 1 0 0 0 0;
      0 1 0 -2 0 0;
      1 -1 0 0 -2 0;
      0 0 0 1 1 0];
b = [0 0 0 1]';
options = optimoptions('ga','Display','iter');
[x,fval] = ga(fmin,nvars,A,b,[],[],lb,ub,@gacon_fun1,intcon,options)
% 使用三中的BNB20_new函数
objfun = @(x)5*x(4)+6*x(5)+8*x(6)+10*x(1)-7*x(3)-18*log(x(2)+1)-19.2*log(x(1)-x(2)+1)+10;
x0 = zeros(6,1); % 初值
xstat = [0 0 0 1 1 1]'; % 都不是整数
xlb = [0 0 0 0 0 0]';
xub = [2 2 1 1 1 1]';
A = [-1 1 0 0 0 0;
      0 1 0 -2 0 0;
      1 -1 0 0 -2 0;
      0 0 0 1 1 0];
b = [0 0 0 1]';
Aeq = [];
beq = [];
[errmsg,objval,objX,t,c,fail] = BNB20_new(objfun,x0,xstat,xlb,xub,A,b,Aeq,beq,@gacon_fun1)

 2、粒子群算法

fh = @(x)-x.*sin(10*pi*x) - 2;
[x,fval,exitflag,output] = particleswarm(fh,1,-1,2)

% fh = @(x,y)sin(3*x.*y)+(x-0.1).*(y-1)+x.^2+y.^2;
% fsurf(fh,[-1,3,-3,3])
fh = @(x)sin(3*x(1).*x(2))+(x(1)-0.1).*(x(2)-1)+x(1).^2+x(2).^2;
[x,fval,exitflag,output] = particleswarm(fh,2,[-1;-3],[3;3])

3、模拟退火算法

% 测试函数函数dejong5fcn
[x,fval] = simulannealbnd(@dejong5fcn,rand(1,2))

% fh = @(x,y)(20 + x^2 + y^2 - 10*(cos(2*pi*x) + cos(2*pi*y)));
% fsurf(fh)
fh = @(x)(20 + x(1).^2 + x(2).^2 - 10*(cos(2*pi*x(1)) + cos(2*pi*x(2))));
[x,fval,exitflag] = simulannealbnd(fh,rand(1,2))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短剧直播项目,一个信息赚3600+,小白也能轻松上手!

一位陌生朋友的一句话,我让他赚了3600,你敢相信吗? 事情是在上个礼拜六,一位朋友通过知乎添加我,问我短剧怎么授权直播。我说现在只能授权剪辑,没有授权直播的权限。于是他又问我,你们有教短剧…

Excel·VBA数组平均分组问题

看到一个帖子《excel吧-数据分组问题》,对一组数据分成4组,使每组的和值相近 上一篇文章《ExcelVBA数组分组问题》,解决了这个帖子问题的第1步,即获取所有数组分组形式的问题 接下来要获取分组和值最相近的一组,只需计…

2024年洗地机综合实力排行榜:谁才是真正的洗地神器?

近年来,洗地机在行业里,它集合了扫地和拖地以及自动清洁和除菌的功能,备受人们的喜爱,尤其是平时忙于工作并没有多少时间清洁家务的用户,但是对于第一次接触洗地机的用户来说,怎么选购洗地机也是个问题&…

2024新版本知识付费微信小程序源码_亲测可用(附下载链接)

介绍: 主要功能 会员系统,用户登录/注册购买记录 收藏记录 基本设置 后台控制导航颜色 字体颜色 标题等设置 流量主广告开关小程序广告显示隐藏 广告主审核过审核 资源管理 后台可以添加5种类型资源灵活设置 激励广告解锁资源 vip专享资源 免费资源…

代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和,134. 加油站 , 135. 分发糖果

贪心&#xff0c;每次选择最小的数来取反 用了一个优先级队列来做处理&#xff0c;维护一个顺序的数组 class Solution { public:typedef struct comp{bool operator()(const int & a,const int & b){return a > b;}}comp;int largestSumAfterKNegations(vector<…

JavaEE初阶——关于进程

此篇文章和大家一起分享关于操作系统对进程的调度 目录 1.操作系统 操作系统的构成 2.进程 2.1进程的概念 2.2管理 2.3pcb (1)pid (2)内存指针 ​编辑 (3)文件描述符 (4)进程调度信息 并行执行 并发执行 pcb中支持进程调度的属性 谢谢您的访问!!期待您的关注!! …

【概念验证(POC):技术项目开发的关键一步】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

redis开启aof持久化失败,无法生成.aof文件

大概率是因为redis-server服务没有关&#xff0c;关掉之后先删除.rdb文件&#xff0c;然后重启server&#xff0c;再去使用cli&#xff0c;然后退出应该就有.aof文件了 1、改配置文件 在redis.conf文件中搜索appendonly&#xff0c;然后将no修改为yes&#xff0c;保存并退出。…

程序员必会技能—股权之舟引领创业者驶向成功之岸【文末送书-44】

文章目录 程序员必会技能—股权之舟引领创业者驶向成功之岸股权进阶&#xff1a;让股权助创业成功的核心3问【文末送书-44】 程序员必会技能—股权之舟引领创业者驶向成功之岸 在创业过程中&#xff0c;股权管理是至关重要的一环。正确处理股权关系可以促进公司的发展&#xf…

RuoYi-Vue-Plus(登录流程-验证码生成)

一、登录流程 1- 进入登录页面&#xff0c;调用 com.ruoyi.web.controller.common.CaptchaController 类中的 captchaImage 方法&#xff0c;生成base64的图片 以及 UUID 2- 提交 登录信息 验证码 uuid 比对 错误&#xff1a;返回错误信息&#xff0c;删除缓存的验证码 成功…

vivado Modifying Logic

修改逻辑 在中实现后&#xff0c;可以修改非只读逻辑对象的属性Vivado IDE以及Tcl。 注意&#xff1a;有关Tcl命令的更多信息&#xff0c;请参阅Vivado Design Suite Tcl命令参考指南&#xff08;UG835&#xff09;&#xff0c;或键入&#xff1c;command&#xff1e;-help。…

SEO 谷歌浏览器模拟baodu蜘蛛 模拟UA 设置UA

目录 前言baidu UA操作设置百度UA 前言 要在谷歌浏览器中设置用户代理&#xff08;User Agent&#xff09;来模拟百度蜘蛛&#xff0c;您可以按照以下步骤进行操作 baidu UA Mozilla/5.0 (compatible; Baiduspider-render/2.0; http://www.baidu.com/search/spider.html)操作…

Linux(1)常用指令总结大全

1、firewall-cmd 1.1 打开443/TCP端口 firewall-cmd --add-port443/tcp 1.2 永久打开3690/TCP端口 firewall-cmd --permanent --add-port3690/tcp ​ # 永久打开端口好像需要reload一下&#xff0c;临时打开好像不用&#xff0c;如果用了reload临时打开的端口就失效了 # …

【无标题】C高级325

练习1&#xff1a;输入一个数&#xff0c;实现倒叙123-》321 练习2&#xff1a;输入一个&#xff0c;判断是否是素数 练习3&#xff1a;输入一个文件名&#xff0c; 判断是否在家目录下存在, 如果是一个目录&#xff0c;则直接输出是目录下的sh文件的个数 如果存在则判断是否是…

java常用应用程序编程接口(API)——IO流概述及字节流的使用

前言&#xff1a; IO流和File是用于把数据存放在硬盘里的工具。File可以把文件存至硬盘&#xff0c;但不能更改里面的数据。通过IO流可以改写硬盘里的数据。整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! IO流 I指Input&#xff0c;称为输入流&#xff1a;负责把…

【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型

【好书推荐2】AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型 写在最前面AI辅助研发方向一&#xff1a;AI辅助研发的技术进展方向二&#xff1a;行业应用案例方向三&#xff1a;面临的挑战与机遇方向四&#xff1a;未来趋势预测方向五&#xff1a;与法规的…

扬州大数据局领导一行参访百望云 探索新质生产力在百态千业的落地场景

​ 在当前全球经济一体化的大背景下&#xff0c;新质生产力的发展代表着科技进步、产业升级和商业模式创新的方向。特别两会期间&#xff0c;新质生产力概念爆火&#xff0c;也体现出我国政府高度重视新质生产力&#xff0c;将其作为实现高质量发展的重要支柱。 在此背景下&…

Day20 代码随想录(1刷) 二叉树

目录 654. 最大二叉树 617. 合并二叉树 700. 二叉搜索树中的搜索 98. 验证二叉搜索树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数…

今日arXiv最热NLP大模型论文:微软重磅:AgentAI,下一代人工智能的关键

人工智能的发展已从简单算法进化到复杂的大型基础模型&#xff0c;尤其在理解开放世界环境中的感官信息方面取得显著进步。然而&#xff0c;关键转折点在于从过度简化方法转向强调整体运作的系统&#xff0c;催生了Agent AI的兴起。Agent AI将大型基础模型整合到代理行动中的具…

如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段&#xff0c;应用服务通常是部署在开发环境&#xff0c;在有数据回调的开发场…