您的位置:首页 > 编程语言 > MATLAB

matlab与常见算法_线性规划

2012-10-30 21:08 274 查看
开设新版块,关于matlab的一些常见问题解决,很多东西都是边学边整理的,大神勿喷求指导,3ks。

线性规划是规划类问题里面相对最简单的问题,如果你懒得听我啰嗦,google matlab函数“linprog”即可,它是解决线性规划问题的关键。

说简单是最优解的问题,经常遇到的工厂利益最大化,抽象出来约束条件和目标函数,求最优解。

matlab求解线性规划问题,在模型抽象好了,约束条件目标函数确定之后,用linprog这样的函数来完成求最优解,那先介绍一下这个函数。

[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)

函数的作用是用来求目标函数的最小解(注意是最小解min,matlab标准式规定求最小解,最大解问题须事先转换),参数由向量和矩阵组成(实际上这也是matlab最喜欢的)。

x:返回的最优x解向量,n维的。

fval:返回目标函数的值。

c:n维列向量,目标函数的表达式由c的转置与个未知数组成的列向量乘积组成。

A:适当维数的矩阵,每一行都是由一个不等式的未知数系数组成的向量。

b:适当维数的列向量,与A匹配,描述所有的不等式约束。

Aeq:适当维数的矩阵,区别于A,每一行由等式未知数系数组成的向量。

beq:适当维数的列向量,与Aeq匹配,描述所有的等式约束。

LB:x的下界 ; UB:x的上界。

OPTIONS:控制参数。

以上是linprog的完全体(数码宝贝?),平常的基本函数形式用的参数少,如:x = linprog(c,A,b)。matlab命令窗口输入help linprog 可看到详细解释。

简单举例:

求线性规划问题:

max y = 2a+3b-5c //目标函数 可得c'=[2,3,-5] x'=[a,b,c] 注意我用的是转置,因为c,x都是列向量。

a + b + c = 7 //等式约束条件可得Aeq=[1,1,1] beq=7 因为只有一个等式,Aeq只是一个行向量。

2a - 5b + c >=10 //不等式约束条件,需要化成<=的形式,下一个式子也是不等式约束条件。

a + 3b + c <= 12 //可得A=[-2,5,-1;1,3,1] b=[-10,12] A是两行三列的矩阵 b是列向量

a,b,c>=0

可编写简单的exercise.m文件实现:

c=[2;3;-5];
a=[-2,5,-1;1,3,1]; b=[-10;12];
aeq=[1,1,1];
beq=7;
x=linprog(-c,a,b,aeq,beq,zeros(3,1)); //zeros(m,n)是生成m行n列0矩阵 初始化用

value = c'*x ; // y最小值 c'为c的转置

disp(x);

disp(value); //打印

命令窗口执行文件即可。

线性规划的问题如果做到抽象出约束条件了,基本就等于完成了,难点在问题的转换上,不过以上是解决问题的基础必备。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: