线性规划 + 非线性规划 + 01规划

线性规划

代码

%%%%%%%%%%%
% min
% [x, fval] = linprog(f,a,b,aeq,beq,lb,ub);

%  max = 2*x1 + 3*x2
%  x1 + 2*x2 <=8
%  4*x1 <= 16
%  4*x2 <= 12
%  x1, x2 >=0
%%%%%%%%%%

f = [-2 -3]';
a = [1 2; 4 0;0 4];
b = [8 16 12]';
[x,z] = linprog(f, a, b, [],[],zeros(2,1));
x, z=-z
%因为题目要求是求最大值,而linprog为求最小值,所以要把f变为[-2 ;-3];而且在最后结果的时候要把z = -z

结果

在这里插入图片描述

非线性规划

代码

%%%%%%%%%%%%%%%%%%%
% minf(x) = x1^2 + x2^2 + x3^2 + 8
% 
% x1^2 - x2 + x3^2 >=0
% x1 + x2^2 + x3^3 <=20
% -x1 -x2^2 + 2 = 0
% x2 + 2x3^2 = 3
% x1, x2, x3 >=0
%%%%%%%%%%%%%%%%%%%%
[x, y] = fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')



%相关函数如下
fun1.m
function f = fun1(x)
f = sum(x.^2) + 8;
end




fun2.m
function [g,h] = fun2(x)
g = [-x(1)^2 + x(2) - x(3)^2
    x(1) + x(2)^2 + x(3)^3 - 20];  %非线性不等式约束

h = [-x(1) - x(2)^2 + 2
    x(2) + 2*x(3)^2 - 3];  %非线性等式约束

结果

在这里插入图片描述

01规划

就是变量只能取0 or 1
指派矩阵的含义:比如4个人做4件事情,这4个人都会做这4件事情。但是每个人做不同事情花费的时间不一样。要求:每个人只能做一件事,每件事都必须要有人做,如何分配任务,才能使总的花费时间最少?
在这里插入图片描述
在这里插入图片描述

代码

clc,clear
disp('输入指派矩阵');
c = input('c = ');
% c = [8 13 18 23; 10 14 16 27;2 10 21 26; 14 22 26 28];
%c = [3 8 2 10 3;8 7 2 9 7;6 4 2 7 5;8 4 2 3 5;9 10 6 9 10];
[m, n] = size(c);
%把c转为按列项排列为列矩阵
c = c(:);
a = zeros(m+n,m*n); % 1025%表示从第1个变量到第25个变量都是必须是整数
intcon = 1:m*n;  
for i = 1:m
    a(i,(i-1)*m+1:m*i) = 1;
    a(m+i, i:m:m*n) = 1;
end
b = ones(m+n,1);
lb = zeros(m*n, 1);
ub = ones(m*n,1);
[x,z] = intlinprog(c, intcon,[],[],a,b, lb, ub);
x = reshape(x,[m,n])
z

结果

在这里插入图片描述
输入指派矩阵为: [3 8 2 10 3;8 7 2 9 7;6 4 2 7 5;8 4 2 3 5;9 10 6 9 10]
结果如下:
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值