matlab与常见算法_线性规划

                     开设新版块,关于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); //打印

命令窗口执行文件即可。

            线性规划的问题如果做到抽象出约束条件了,基本就等于完成了,难点在问题的转换上,不过以上是解决问题的基础必备。

    

                               

 

 

 

posted on 2012-10-30 21:08  vince67  阅读(722)  评论(0编辑  收藏  举报

导航