二次多目标最大最小化.docx

上传人:b****5 文档编号:3602073 上传时间:2022-11-24 格式:DOCX 页数:23 大小:196.15KB
下载 相关 举报
二次多目标最大最小化.docx_第1页
第1页 / 共23页
二次多目标最大最小化.docx_第2页
第2页 / 共23页
二次多目标最大最小化.docx_第3页
第3页 / 共23页
二次多目标最大最小化.docx_第4页
第4页 / 共23页
二次多目标最大最小化.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

二次多目标最大最小化.docx

《二次多目标最大最小化.docx》由会员分享,可在线阅读,更多相关《二次多目标最大最小化.docx(23页珍藏版)》请在冰豆网上搜索。

二次多目标最大最小化.docx

二次多目标最大最小化

二次、目标及动态规划

§1二次规划模型

数学模型:

其中H为二次型矩阵,A、Aeq分别为不等式约束与等式约束系数矩阵,f,b,beq,lb,ub,x为向量。

求解二次规划问题函数为quadprog()

调用格式:

X=quadprog(H,f,A,b)

X=quadprog(H,f,A,b,Aeq,beq)

X=quadprog(H,f,A,b,Aeq,beq,lb,ub)

X=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)

X=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)

[x,fval]=quadprog(…)

[x,fval,exitflag]=quadprog(…)

[x,fval,exitflag,output]=quadprog(…)

[x,fval,exitflag,output,lambda]=quadprog(…)

说明:

输入参数中,x0为初始点;若无等式约束或无不等式约束,就将相应的矩阵和向量设置为空;options为指定优化参数。

输出参数中,x是返回最优解;fval是返回解所对应的目标函数值;exitflag是描述搜索是否收敛;output是返回包含优化信息的结构。

Lambda是返回解x入包含拉格朗日乘子的参数。

例1:

求解:

二次规划问题

minf(x)=x1-3x2+3x12+4x22-2x1x2

s.t2x1+x2≤2

-x1+4x2≤3

程序:

f=[1;-3]

H=[6-2;-28]

A=[21;-14]

b=[2;3]

[X,fval,exitflag]=quadprog(H,f,A,b)

结果:

X=

-0.0455

0.3636

fval=

-0.5682

exitflag=

1

例2:

求解:

二次规划问题

minx12+2x22-2x1x2-4x1-12x2

s.tx1+x2≤2

-x1+2x2≤2

2x1+x2≤3

0≤x1,0≤x2

程序:

H=[2-2;-24];

f=[-4;-12];

A=[11;-12;21];

b=[2;2;3];

lb=zeros(2,1);

[x,fval,exitflag]=quadprog(H,f,A,b,[],[],lb)

结果:

x=

0.6667

1.3333

fval=

-16.4444

exitflag=

1

练习1求解下面二次规划问题

sub.to

解:

在MATLAB中实现如下:

>>H=[1-1;-12];

>>f=[-2;-6];

>>A=[11;-12;21];

>>b=[2;2;3];

>>lb=zeros(2,1);

>>[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)

结果为:

x=%最优解

0.6667

1.3333

fval=%最优值

-8.2222

exitflag=%收敛

1

output=

iterations:

3

algorithm:

'medium-scale:

active-set'

firstorderopt:

[]

cgiterations:

[]

lambda=

lower:

[2x1double]

upper:

[2x1double]

eqlin:

[0x1double]

ineqlin:

[3x1double]

>>lambda.ineqlin

ans=

3.1111

0.4444

0

>>lambda.lower

ans=

0

0

说明第1、2个约束条件有效,其余无效。

练习2求二次规划的最优解

maxf(x1,x2)=x1x2+3

sub.tox1+x2-2=0

解:

化成标准形式:

sub.tox1+x2=2

在Matlab中实现如下:

>>H=[0,-1;-1,0];

>>f=[0;0];

>>Aeq=[11];

>>beq=2;

>>[x,fval,exitflag,output,lambda]=quadprog(H,f,[],[],Aeq,beq)

结果为:

x=

1.0000

1.0000

fval=

-1.0000

exitflag=

1

output=

firstorderopt:

0

iterations:

1

cgiterations:

1

algorithm:

[1x58char]

lambda=

eqlin:

1.0000

ineqlin:

[]

lower:

[]

upper:

[]

§2最小二乘最优问题

1约束线性最小二乘

有约束线性最小二乘的标准形式为

sub.to

其中:

C、A、Aeq为矩阵;d、b、beq、lb、ub、x是向量。

函数lsqlin

格式x=lsqlin(C,d,A,b)%求在约束条件

下,方程Cx=d的最小二乘解x。

x=lsqlin(C,d,A,b,Aeq,beq)%Aeq、beq满足等式约束

,若没有不等式约束,则设A=[],b=[]。

x=lsqlin(C,d,A,b,Aeq,beq,lb,ub)%lb、ub满足

,若没有等式约束,则Aeq=[],beq=[]。

x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)%x0为初始解向量,若x没有界,则lb=[],ub=[]。

x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)%options为指定优化参数

[x,resnorm]=lsqlin(…)%resnorm=norm(C*x-d)^2,即2-范数。

[x,resnorm,residual]=lsqlin(…)%residual=C*x-d,即残差。

[x,resnorm,residual,exitflag]=lsqlin(…)%exitflag为终止迭代的条件

[x,resnorm,residual,exitflag,output]=lsqlin(…)%output表示输出优化信息

[x,resnorm,residual,exitflag,output,lambda]=lsqlin(…)%lambda为解x的Lagrange乘子

例1求解下面系统的最小二乘解

系统:

Cx=d

约束:

先输入系统系数和x的上下界:

C=[0.95010.76200.61530.4057;…

0.23110.45640.79190.9354;…

0.60680.01850.92180.9169;…

0.48590.82140.73820.4102;…

0.89120.44470.17620.8936];

d=[0.0578;0.3528;0.8131;0.0098;0.1388];

A=[0.20270.27210.74670.4659;…

0.19870.19880.44500.4186;…

0.60370.01520.93180.8462];

b=[0.5251;0.2026;0.6721];

lb=-0.1*ones(4,1);

ub=2*ones(4,1);

然后调用最小二乘命令:

[x,resnorm,residual,exitflag,output,lambda]=lsqlin(C,d,A,b,[],[],lb,ub);

结果为:

x=

-0.1000

-0.1000

0.2152

0.3502

resnorm=

0.1672

residual=

0.0455

0.0764

-0.3562

0.1620

0.0784

exitflag=

1%说明解x是收敛的

output=

iterations:

4

algorithm:

'medium-scale:

active-set'

firstorderopt:

[]

cgiterations:

[]

lambda=

lower:

[4x1double]

upper:

[4x1double]

eqlin:

[0x1double]

ineqlin:

[3x1double]

通过lambda.ineqlin可查看非线性不等式约束是否有效。

2非线性数据(曲线)拟合

非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x,xdata),但不知道系数向量x。

今进行曲线拟合,求x使得下式成立:

函数lsqcurvefit

格式x=lsqcurvefit(fun,x0,xdata,ydata)

x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

[x,resnorm]=lsqcurvefit(…)

[x,resnorm,residual]=lsqcurvefit(…)

[x,resnorm,residual,exitflag]=lsqcurvefit(…)

[x,resnorm,residual,exitflag,output]=lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda]=lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(…)

参数说明:

x0为初始解向量;xdata,ydata为满足关系ydata=F(x,xdata)的数据;

lb、ub为解向量的下界和上界

,若没有指定界,则lb=[],ub=[];

options为指定的优化参数;

fun为拟合函数,其定义方式为:

x=lsqcurvefit(@myfun,x0,xdata,ydata),

其中myfun已定义为functionF=myfun(x,xdata)

F=…%计算x处拟合函数值fun的用法与前面相同;

resnorm=sum((fun(x,xdata)-ydata).^2),即在x处残差的平方和;

residual=fun(x,xdata)-ydata,即在x处的残差;

exitflag为终止迭代的条件;

output为输出的优化信息;

lambda为解x处的Lagrange乘子;

jacobian为解x处拟合函数fun的jacobian矩阵。

例2求解如下最小二乘非线性拟合问题

已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为

即目标函数为

其中:

初始解向量为x0=[0.3,0.4,0.1]。

解:

先建立拟合函数文件,并保存为ff4.m

functionF=ff4(x,xdata)

F=x

(1)*xdata.^2+x

(2)*sin(xdata)+x(3)*xdata.^3;

然后给出数据xdata和ydata

>>xdata=[3.67.79.34.18.62.81.37.910.05.4];

>>ydata=[16.5150.6263.124.7208.59.92.7163.9325.054.3];

>>x0=[10,10,10];%初始估计值

>>[x,resnorm]=lsqcurvefit(@ff4,x0,xdata,ydata)

结果为:

Optimizationterminatedsuccessfully:

RelativefunctionvaluechangingbylessthanOPTIONS.TolFun

x=

0.22690.33850.3021

resnorm=

6.2950

3非线性最小二乘

非线性最小二乘(非线性数据拟合)的标准形式为

其中:

L为常数

在6.0版中使用函数lsqnonlin。

则目标函数可表达为

其中:

x为向量,F(x)为函数向量。

函数lsqnonlin

格式x=lsqnonlin(fun,x0)%x0为初始解向量;fun为

,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。

x=lsqnonlin(fun,x0,lb,ub)%lb、ub定义x的下界和上界:

x=lsqnonlin(fun,x0,lb,ub,options)%options为指定优化参数,若x没有界,则lb=[],ub=[]。

[x,resnorm]=lsqnonlin(…)%resnorm=sum(fun(x).^2),即解x处目标函数值。

[x,resnorm,residual]=lsqnonlin(…)%residual=fun(x),即解x处fun的值。

[x,resnorm,residual,exitflag]=lsqnonlin(…)%exitflag为终止迭代条件。

[x,resnorm,residual,exitflag,output]=lsqnonlin(…)%output输出优化信息。

[x,resnorm,residual,exitflag,output,lambda]=lsqnonlin(…)%lambda为Lagrage乘子。

[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(…)%fun在解x处的Jacobian矩阵。

例3求下面非线性最小二乘问题

初始解向量为x0=[0.3,0.4]。

解:

先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由

建立:

k=1,2,…,10

functionF=ff5(x)

k=1:

10;

F=2+2*k-exp(k*x

(1))-exp(k*x

(2));

然后调用优化程序:

x0=[0.30.4];

[x,resnorm]=lsqnonlin(@ff5,x0)

结果为:

Optimizationterminatedsuccessfully:

NormofthecurrentstepislessthanOPTIONS.TolX

x=

0.25780.2578

resnorm=%求目标函数值

124.3622

例4.求minf=4(x2-x1)2+(x2-4)2,选择初始点x0(1,1)

程序:

先建立m文件:

Functionf=ff6(x)

f

(1)=2*x

(2)-2*x

(1);

f

(2)=x

(2)-4

然后:

调用

[x,resnorm,residual]=lsqnonlin(@ff6,[1,1])

结果:

x=

3.98963.9912

resnorm=

5.0037e-009

4非负线性最小二乘

非负线性最小二乘的标准形式为:

sub.to

其中:

矩阵C和向量d为目标函数的系数,向量x为非负独立变量。

在6.0版中则用函数lsqnonneg。

函数lsqnonneg

格式x=lsqnonneg(C,d)%C为实矩阵,d为实向量

x=lsqnonneg(C,d,x0)%x0为初始值且大于0

x=lsqnonneg(C,d,x0,options)%options为指定优化参数

[x,resnorm]=lsqnonneg(…)%resnorm=norm(C*x-d)^2

[x,resnorm,residual]=lsqnonneg(…)%residual=C*x-d

[x,resnorm,residual,exitflag]=lsqnonneg(…)

[x,resnorm,residual,exitflag,output]=lsqnonneg(…)

[x,resnorm,residual,exitflag,output,lambda]=lsqnonneg(…)

例5一个最小二乘问题的无约束与非负约束解法的比较。

先输入数据:

>>C=[0.03720.2869;0.68610.7071;0.62330.6245;0.63440.6170];

>>d=[0.8587;0.1781;0.0747;0.8405];

>>[C\d,lsqnonneg(C,d)]

ans=

-2.56270

3.11080.6929

注意:

1。

当问题为无约束线性最小二乘问题时,使用MATLAB下的“\”运算即可以解决。

2.对于非负最小二乘问题,调用lsqnonneg(C,d)求解。

§3多目标规划模型

多目标规划定义为在一组约束下,多个不同的目标函数进行优化设计。

数学模型:

s.tgj(x)≤0j=1,2,…,k

其中x=(x1,x2,…,xn)为一个n维向量;fi(x)为目标函数,i=1,2,…,m;gj(x)为系统约束,j=1,2,…,k。

当目标函数处于冲突状态时,不存在最优解使所有目标函数同时达到最优。

于是我们寻求有效解(又称非劣解或非支配解或帕累托解)

定义:

∈Ω)的邻域内不存在Δx,使得(

+Δx∈Ω),且

则称

为有效解。

多目标规划问题的几种常用解法:

(1) 主要目标法

其基本思想是:

在多目标问题中,根据问题的实际情况,确定一个目标为主要目标,而把其余目标作为次要目标,并且根据经验,选取一定的界限值。

这样就可以把次要目标作为约束来处理,于是就将原来的多目标问题转化为一个在新的约束下的单目标最优化问题。

(2) 线性加权和法

其基本思想是:

按照多目标fi(x)(i=1,2,…,m)的重要程度,分别乘以一组权系数λj(j=1,2,…,m)然后相加作为目标函数而构成单目标规划问题。

,其中

例1:

某钢铁厂准备用5000万用于A、B两个项目的技术改造投资。

设x1、x2分别表示分配给项目A、B的投资。

据专家预估计,投资项目A、B的年收益分别为70%和66%。

同时,投资后总的风险损失将随着总投资和单项投资的增加而增加,已知总的风险损失为0.02x12+0.01x22+0.04(x1+x2)2,问应如何分配资金才能使期望的收益最大,同时使风险损失为最小。

建立数学模型

maxf1(x)=70x1+66x2

minf2(x)=0.02x12+0.01x22+0.04(x1+x2)2

s.tx1+x2≤5000

0≤x1,0≤x2

线性加权构造目标函数:

maxf=0.5f1(x)–0.5f2(x)

化最小值问题:

min(-f)=-0.5f1(x)+0.5f2(x)

首先编辑目标函数M文件ff11.m

functionf=ff11(x)

f=-0.5*(70*x

(1)+66*x

(2))+0.5*(0.02*x

(1)^2+0.01*x

(2)^2+0.04*(x

(1)+x

(2))^2);

调用单目标规划求最小值问题的函数

x0=[1000,1000]

A=[11];

b=5000;

lb=zeros(2,1);

[x,fval,exitflag]=fmincon(@ff11,x0,A,b,[],[],lb,[])

f1=70*x

(1)+66*x

(2)

f2=0.02*x

(1)^2+0.01*x

(2)^2+0.04*(x

(1)+x

(2))^2

结果:

x=

307.1428414.2857

fval=

-1.2211e+004

exitflag=

1

f1=4.8843e+004

f2=2.4421e+004

(3) 极大极小法

其基本思想是:

对于极小化的多目标规划,让其中最大的目标函数值尽可能地小,为此,对每个x∈R,我们先求诸目标函数值fi(x)的最大值,然后再求这些最大值中的最小值。

即构造单目标规划:

(4) 目标达到法

对于多目标规划:

s.tgj(x)≤0j=1,2,…,n

先设计与目标函数相应的一组目标值理想化向量

再设γ为一松弛因子标量。

为权值系数向量。

于是多目标规划问题化为:

在Matlab的优化工具箱中,fgoalattain函数用于解决此类问题。

其数学模型形式为:

minγ

F(x)-weight·γ≤goal

c(x)≤0

ceq(x)=0

Ax≤b

Aeqx=beq

lb≤x≤ub

其中,x,weight,goal,b,beq,lb和ub为向量,A和Aeq为矩阵,c(x),ceq(x)和F(x)为函数,

调用格式:

x=fgoalattain(F,x0,goal,weight)

x=fgoalattain(F,x0,goal,weight,A,b)

x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq)

x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub)

x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)

x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)

x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2)

[x,fval]=fgoalattain(…)

[x,fval,attainfactor]=fgoalattain(…)

[x,fval,attainfactor,exitflag,output]=fgoalattain(…)

[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(…)

说明:

F为目

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1