Matlab优化设计及其应用
上QQ阅读APP看书,第一时间看更新

1.1 最优化问题的提出

优化的概念来源于求某一设计(广义的设计)的最优结果,用数学观点来说就是求解某一个或几个目标函数的最大值或最小值。针对设计建立数学模型,通过解析或数值计算寻找到求解优化设计的依据,用以指导设计的实施。如某设计的模型可用一元函数f(x)来表示,求最优设计就是求一元函数的最大值或最小值。如果一元函数是单调函数,则函数的最大值或最小值会在变量x的边界上取得;如果一元函数是二次函数,则函数的极值在函数曲线的顶点上取得;如果一元函数是高次函数,函数曲线有多个极值点,则求函数的最大或最小值问题就变得复杂起来,对多元函数的极值问题更是如此,需要用到后续章节介绍的局部或全局优化算法来求解。

线性规划问题是目标函数和限制条件都是线性函数的问题,在生产和生活中很多问题都可抽象为线性规划问题,下面以示例子说明优化设计问题的提出、建模及求解的全过程。

【例1-1】 资源分配问题是线性规划中的一类问题。这里所说的资源其含义广泛,可以是一般的物质资源,也可以是人力资源。资源分配问题可描述为生产若干种产品(广义的产品)需要几种不同的资源,如原料消耗量、设备使用量、人力需求量等。各种资源供应量有一定限制,所生产的产品有不同的利润或花费不同的费用。所求问题是在所消耗资源和资源供给量限制的条件下,求生产不同的产品的数量,使收益最大或费用最低。如下面的问题。

某工厂要生产两种规格的电冰箱,分别用Ⅰ和Ⅱ表示。生产电冰箱需要两种原材料A和B,另外需设备C。生产两种电冰箱所需原材料、设备台时、资源供给量及两种产品可获得的利润如表1-1所示。问工厂应分别生产Ⅰ、Ⅱ型电冰箱多台,才能使工厂获利最多?

表1-1 资源需求与限制

解:设生产Ⅰ、Ⅱ两种产品的数量分别为x1,x2。则可获得的最大收益为

max f(x)=220x1+250x2,x∈R2

s.t.x1+x2≤1200

2x1+x2≤1800

x1≤800

x2≤1000

x1,x2≥0

Matlab求解程序如下:

%li_1_1

clc;

close all;

f=-[220 250];

A=[1 1;2 1;1 0;0 1];

b=[1200;1800;800;1000];

xl=[0 0];

[x,fval]=linprog(f,A,b,[],[],xl)

x1=[0:1800];

x2=[0:2000];

[xm1,xm2]=meshgrid(x1,x2);

x21=1200-x1;

x22=1800-2*x1;

x23=(-fval-220*x1)/250;

plot(x1,x21,x1,x22,[0:1:1000],1000,800,[0:1:1500],x1,x23,'r')

axis([0,1400,0,2000])

xlabel('x1');

ylabel('x2');

hold on

z=200*xm1+250*xm2;

[C,h]=contour(xm1,xm2,z);

text_handle=clabel(C,h);

set(text_handle,'BackgroundColor',[11.6],'Edgecolor',[.7.7.7]);

hold off

计算结果为:

目标函数等值线和约束函数曲线如图1-1所示。

通过例子我们初步了解了优化设计求解的过程,以及优化设计的“威力”。

在【例1-1】的求解中使用了标准化的优化数学模型,而优化问题数学模型的一般描述为

min(max)f(x)=f(x1,x2,…,xn),x∈Rn

s.t.gu(x)≤(≥)0,(u=1,2,…,L)

hv(x)=0,(v=1,2,…,M)  (1-1)

其中,Rn表示n维实欧氏空间;s.t.是subject to或so that的缩写,意为“受限于”或“满足于”。需要说明的是,Matlab中求线性规划问题的函数linprog()将约束条件统一为小于或等于类型的约束条件。

图1-1 【例1-1】约束函数曲线及目标函数等值线