matlab中多目标线性规划函数如何使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中多目标线性规划函数如何使用相关的知识,希望对你有一定的参考价值。

MATLAB中的fgoalattain怎么使用,请教高手,麻烦详细一点,把函数中参数分别代表什么意思解释一下,最好有例子,谢谢各位的回答!

  matlab中多目标线性规划函数,具体使用如下:
  线性规划:LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:
  min x
  s.t.
  A·x b
  Aeq·x=beq
  vlb x vub
  其中 ,b,beq均为向量,A,Aeq为矩阵,x为向量变量.矩阵A和向量b是线性不等式约束条件的系数,Aeq和beq是等式约束条件的系数.
  在MATLAB中,用于LP的求解函数为linprog.其调用格式为:
  [x,fval,lambda]=linprog
  (f,A,b,Aeq,beq,vlb,vub,x0,options)
  其中f,A,b,是不可缺省的输入变量,x是不可缺省的输出变量,它是问题的解.vlb,vub均是向量,分别表示x的下界和上界,x0为x的起始点,options为optimset函数中定义的参数的值,fval是目标函
  数在解x处的值,lambda为在解x处的lagrange乘子.lambda.lower对应于vlb,lambda.upper对应于ulb,lambda.ineqlin是对应于线性不等式约束的,lambda.eqlin是对应于线性等式约束的.
  下面举一个小例子看看函数的作用:
  minZ=-4a+b+7c
  s.t.
  a+b-c=5 3a-b+c<=4
  a+b-4c<=-7 a,b>=0
  问a,b,c分别取何值时,Z有最小值
  编写M文件
  c=[-4 1 7];
  A=[3 -1 1;1 1 -4];
  b=[4; -7];
  Aeq=[1 1 -1];
  beq=[5];vlb=[0, 0];
  vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
  结果:x = 2.2500 6.7500 4.0000fval = 25.7500
  即a,b,c分别取2.2500 6.7500 4.0000时,Z有最小值25.7500
  更加详细的例子如下,因为上面没有讲明最大值与最小值的区别,补充如下:
  函数格式:linprog(f,a,b,a1,b1,xstart,xend)
  f:求解最小函数的表达式系数矩阵是m*1的矩阵
  a:≤不等式条件约束矩阵其均为形式
  b:a对应不等式右边的常数项
  a1:=等式条件约束矩阵
  b1:a1对应不等式右边的常数项
  xstart:x的取值范围的最小值的系数矩阵为n*1的矩阵
  xend:x的取值范围的最大值的系数矩阵为n*1的矩阵
  函数说明:不存在的项填写[]即可
  函数功能:线性规划求最优值.
参考技术A [x,fval,attainfactor] =fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x:最优解
fval:每个目标函数最优值
attainfactor:超出或未到 目标 的 量
fun:目标 函数,由于 是多目标函数,所以这是一个 向量
x0,自变量的 初始值
goal:目标,是个向量
weight:各个 目标 的权重
下面三个同线性优化一样
Ax<=b
Aeq*x=beq
lb<x<ub

nonlcon与非线性约束函数fmincon中 一样

例子 见:http://zhidao.baidu.com/question/18045673.html?si=1#本回答被提问者采纳

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数

文章目录


项目资源链接如下https://download.csdn.net/download/weixin_46584887/86406561


1. 项目场景

对于如下大规模线性规划问题:

min ⁡    c 1 x 1 + c 2 x 2 + ⋯ + c n x n s.t.   a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 … a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n = b m x 1 , x 2 , … , x n ≥ 0 \\beginarrayrl \\min\\ \\ &c_1x_1+c_2x_2+\\dots+c_nx_n\\\\ \\textrms.t.\\ \\ &a_11x_1+a_12x_2+\\dots+a_1nx_n=b_1\\\\ &a_21x_1+a_22x_2+\\dots+a_2nx_n=b_2\\\\ &\\dots\\\\ &a_m1x_1+a_m2x_2+\\dots+a_mnx_n=b_m\\\\ &x_1,x_2,\\dots,x_n\\ge0 \\endarray min  s.t.  c1x1+c2x2++cnxna11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2am1x1+am2x2++amnxn=bmx1,x2,,xn0

或者写成如下形式:

min ⁡   c x   s.t.  A x = b x ≽ 0 \\min\\ \\bfcx\\ \\ \\textrms.t.\\ \\left\\\\beginarrayl\\bf Ax=b\\\\ \\bf x\\succcurlyeq 0\\\\ \\endarray\\right. min cx  s.t. Ax=bx0

并且 A ∈ R m × n , x ∈ R n × 1 , b ∈ R m × 1 \\bfA\\in R_m\\times n,x\\in R_n\\times 1,b\\in R_m\\times 1 ARm×n,xRn×1,bRm×1.


2. 约束的规范化

  • 对于缺乏非负约束的变量 x i x_i xi,我们做出如下转化 :

    • x i = x i 1 − x i 2 x_i=x_i1-x_i2 xi=xi1xi2

    • x i 1 ≥ 0 , x i 2 ≥ 0 x_i1\\ge0,x_i2\\ge0 xi10,xi20

  • 对于不等式约束,我们也需要将其松弛为等式约束:

    • ∑ j = 0 n a i j x j ≤ b i \\sum_j=0^na_ijx_j\\le b_i j=0naijxjbi 或者 ∑ j = 0 n a i j x j ≥ b i \\sum_j=0^na_ijx_j\\ge b_i j=0naijxjbi

    • x n + i ± ∑ j = 0 n a i j x j = b i , x n + i ≥ 0 x_n+i\\pm\\sum_j=0^na_ijx_j=b_i, x_n+i\\ge 0 xn+i±j=0naijxj=bi,xn+i0


3. 输入格式

代码从文本文件中读取数据(data.txt):

  • 该文本文件的第一行包含两个整数, m and n, 分别代表约束个数与变量个数
  • 第二行的 n 个元素代表目标函数中变量前的系数 c i c_i ci
  • 接下来 m 行每行包括 n + 1 个元素, 每行的前 n 个元素代表变量前的系数 a i j a_ij aij,,最后一个元素代表 b i b_i bi

举个例子,对于如下线性规划问题:

max ⁡ 5 x 1 + 10 x 2 s.t. 8 x 1 + 8 x 2 ≤ 160

以上是关于matlab中多目标线性规划函数如何使用的主要内容,如果未能解决你的问题,请参考以下文章

matlab整数规划程序

怎么用matlab求下图目标线性函数的最优解,最好有程序

单目标优化求解基于matlab遗传算法求解非线性目标函数最小值问题含Matlab源码 1574期

如何用Matlab求有限制条件的目标函数的最小值求解一个优化问题(目标函数非线性,约束函数线性)?

单目标优化求解基于matlab粒子群算法求解非线性目标函数最小值问题含Matlab源码 1573期

matlab解决非线性规划问题(凸优化问题)