1、31第三章 数学规划模型数学规划论起始 20 世纪 30 年代末,50 年代与 60 年代发展成为一个完整的分支并受到数学界和社会各界的重视。七八十年代是数学规划飞速发展时期,无论是从理论上还是算法方面都得到了进一步完善。时至今日数学规划仍然是运筹学领域中热点研究问题。从国内外的数学建模竞赛的试题中看,有近 1/4 的问题可用数学规划进行求解。 数学规划模型的一般表达式: 0),(. ),(minaxgtsf为目标函数, 为约束函数, 为可控变量, 为已知参数, 为随机参数。fg 本章主要介绍线性规划、整数规划、非线性规划的基本概念与基本原理、无约束问题的最优化方法、约束问题的最优化方法、动态
2、规划。3.1 线性规划线性规划模型是运筹学的重要分支,是 20 世纪三四十年代初兴起的一门学科。1947年美国数学家丹齐格 G.B.Dantzig 及其同事提出的求解线性规划的单纯形法及有关理论具有划时代的意义。他们的工作为线性规划这一学科的建立奠定了理论基础。随着 1979年前苏联数学家哈奇扬的椭球算法和 1984 年美籍印度数学家卡玛卡尔 H.Karmarkar 算法的相继问世,线性规划的理论更加完备成熟,实用领域更加宽广。线性规划研究的实际问题多种多样,如生产计划问题、物资运输问题、合理下料问题、库存问题、劳动力问题、最优设计问题等。 就模型而言,线形规划模型类似于高等数学中的条件极值问
3、题,只是其目标函数和约束条件都限定为线性函数。线性规划模型的求解方法目前仍以单纯形法为主要方法。本节介绍的主要内容有:线性规划模型的建立以及求解,线性规划的 matlab 解法,线性规划问题的建模实例。3.1.1 线性规划模型的建立以及求解一、线性规划模型的建立例 1、某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。生产甲机床需用 机器加工,加工时间分别为每台 2 小时和 1 小时;生产乙机床需用BA、32三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别CBA、为 机器 10 小时、 机器 8 小时和 机器 7 小时,问该厂应生产甲、乙机床
4、各几台,才BC能使总利润最大?建立上述问题的数学模型:设该厂生产 台甲机床和 乙机床时总利润最大,则1x2x应满足:21,x(目标函数) (1)2134maxxzs.t.(约束条件) (2)0,7821x这里变量 称之为决策变量, (1)式被称为问题的目标函数, (2)中的几个不等21,x式是问题的约束条件,记为 s.t.(即 subject to)。上面的目标函数及约束条件均为线性函数,故被称为线性规划问题。一般线性规划问题的标准型为(3)njjxcz1mi(4)njiji mba1,2 s.t 二、线性规划模型的求解求解线性规划模型时,我们来了解一下定义。可行解 满足约束条件(4)的解 ,
5、称为线性规划问题的可行解,而),(21nxx使目标函数(3)达到最小值的可行解叫最优解。可行域 所有可行解构成的集合称为问题的可行域,记为 。R1.图解法33 4 6 8 0123456789 0 ) 图解法简单直观,有助于了解线性规划问题求解的基本原理。我们先应用图解法来求解例 1。如上图所示,阴影区域即为 LP 问题的可行域 R。对于每一固定的值 ,使目标z函数值等于 的点构成的直线称为目标函数等位线,当 变动时,我们得到一族平行直线。z z让等位线沿目标函数值减小的方向移动,直到等位线与可行域有交点的最后位置,此时的交点(一个或多个)即为 LP 的最优解。对于例 1,显然等位线越趋于右上
6、方,其上的点具有越大的目标函数值。不难看出,本例的最优解为 ,最优目标值 。Tx)6,2(*26*z2. 单纯形法单纯形法是求解线性规划问题的最常用、最有效的算法之一。单纯形法是首先由 George Dantzig 于 1947 年提出的,近 60 年来,虽有许多变形体已被开发,但却保持着同样的基本观念。由于有如下结论:若线性规划问题有有限最优解,则一定有某个最优解是可行区域的一个极点。基于此,单纯形法的基本思路是:先找出可行域的一个极点,据一定规则判断其是否最优;若否,则转换到与之相邻的另一极点,并使目标函数值更优;如此下去,直到找到某一最优解为止。三、典型的线性规划问题1.运输问题(产销平
7、衡)例 2 某商品有 个产地、 个销地,各产地的产量分别为 ,各销地的需求量mn ma,1分别为 。若该商品由 产地运到 销地的单位运价为 ,问应该如何调运才能使总nb,1 ij ijc运费最省?解:引入变量 ,其取值为由 产地运往 销地的该商品数量,数学模型为ijxij34minjijxc1s.t. 0,21,1ijmjijnjiixnba显然是一个线性规划问题,当然可以用单纯形法求解。对产销平衡的运输问题,由于有以下关系式存在: minj njijminji axxb1111其约束条件的系数矩阵相当特殊,可用比较简单的计算方法,习惯上称为表上作业法(由康托洛维奇和希奇柯克两人独立地提出,简
8、称康希表上作业法) 。表上作业法是单纯形法在求解运输问题时的一种简化方法,其求解工作在运输表上进行逐步迭代如下:先按某一规则找出一个初始解(初始调运方案) ;再对现行解作最优性判断;若这个解不是最优的,就在运输表上对它进行调整改进,得一新解;再判断,再改进,直到得到最优解。2.指派问题(又称分配问题 Assignment Problem)2.1 指派问题模型建立例 3 拟分配 人去干 项工作,每人干且仅干一项工作,若分配第 人去干第 项工n ij作,需花费 单位时间,问应如何分配工作才能使工人花费的总时间最少?ijc容易看出,要给出一个指派问题的实例,只需给出矩阵 , 被称为指派问题的系)(i
9、jcC数矩阵。引入变量 ,若分配 干 工作,则取 ,否则取 。上述指派问题的数学ijxij1ijx0ijx模型为nijijxc1m35s.t. (5)n,12ji, 0,1或ijnijjijxx(5)的可行解既可以用一个矩阵(称为解矩阵)表示,其每行每列均有且只有一个元素为 1,其余元素均为 0,也可以用 中的一个置换表示。n,1(5)的变量只能取 0 或 1,从而是一个 0-1 规划问题。一般的 0-1 规划问题求解极为困难。但指派问题并不难解,其约束方程组的系数矩阵十分特殊(被称为全单位模矩阵,其各阶非零子式均为 ) ,其非负可行解的分量只能取 0 或 1,故约束 可改写为 10或ijx而
10、不改变其解。此时,指派问题被转化为一个特殊的运输问题,其中 ,0ijx nm。1jiba2.2 求解指派问题的匈牙利算法由于指派问题的特殊性,又存在着由匈牙利数学家 D.Konig 提出的更为简便的解法匈牙利算法。算法主要依据以下事实:如果系数矩阵 一行(或一列)中每一元)(ijcC素都加上或减去同一个数,得到一个新矩阵 ,则以 或 为系数矩阵的指派问)(ijbBB题具有相同的最优指派。利用上述性质,可将原系数阵 C 变换为含零元素较多的新系数阵 B,而最优解不变。若能在 B 中找出 n 个位于不同行不同列的零元素,令解矩阵中相应位置的元素取值为1,其它元素取值为零,则所得该解是以 B 为系数
11、阵的指派问题的最优解,从而也是原问题的最优解。由 C 到 B 的转换可通过先让矩阵 C 的每行元素均减去其所在行的最小元素得矩阵D,D 的每列元素再减去其所在列的最小元素得以实现。下面通过一例子来说明该算法。例 4 求解系数矩阵 的指派问题3661074152498972C解:先作等价变换如下 263040*895712256170415429867容易看出,从变换后的矩阵中只能选出四个位于不同行不同列的零元素,但 ,5n最优指派还无法看出。此时等价变换还可进行下去。步骤如下:对未选出 0 元素的行打 ;对 行中 0 元素所在列打 ;对 列中选中的 0 元素所在行打 ;重复(2) 、 (3)直
12、到无法再打 为止。3.1.2 求解线性规划的 Matlab 解法一、求解线性规划的 Matlab 解法Matlab5.3 中线性规划的标准型为bAxxcT suhta min基本函数形式为 linprog(c,A,b),它的返回值是向量 的值。还有其它的一些函数x调用形式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式) ,如:x,fval=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)这里 fval 返回目标函数的值,Aeq 和 beq 对应等式约束 ,LB 和 UB 分别beqxA*是变量 的下界和上界, 是 的初始值,O
13、PTIONS 是控制参数。 x0x例 1 求解下列线性规划问题3215maz370,1527312x解 (i)编写 M 文件c=2;3;-5;a=-2,5,-1; b=-10;aeq=1,1,1;beq=7;x=linprog(-c,a,b,aeq,beq,zeros(3,1)value=c*x(ii)将 M 文件存盘,并命名为 example1.m。(iii)在 Matlab 指令窗运行 example1 即可得所求结果。二、可以转化为线性规划的问题很多看起来不是线性规划的问题也可以通过变换变成线性规划问题来解决。如:例 2 问题为 bAxxn t.s|min21其中 , 和 为相应维数的矩
14、阵和向量。Tn1要把上面的问题变换成线性规划问题,只要注意到事实:对任意的 ,存在ix满足 , 。0,ivuiiivuxiiivux|事实上,我们只要取 , 就可以满足上面的条件。2|iii 2|iiix这样,记 , ,从而我们可以把上面的问题变成Tnuu1Tnvv1niiiv1)(m0,t.subA3.1.3 线性规划问题的建模举例38营养配餐问题。每种蔬菜含有的营养素成份是不同的,从医学上知道,每人每周对每种营养成分的最低需求量。某医院营养室在制定下一周菜单时,需要确定表 2-3 中所列六种蔬菜的供应量,以便使费用最小而又能满足营养素等其它方面的要求。规定白菜的供应一周内不多于 20kg,
15、其它蔬菜的供应在一周内不多于 40kg,每周共需供应 140kg蔬菜,为了使费用最小又满足营养素等其它方面的要求,问在下一周内应当供应每种蔬菜各多少 kg?问题分析与模型建立设 (i=1,2,6)分别表示下一周内应当供应的青豆、胡萝卜、菜花、白菜、ix甜菜及土豆的量,费用目标函数为:min 654321 385xxxf 约束条件:铁的需求量至少 6 个单位数: 65040.5.14.05. 321 xxx磷的需求量至少 25 个单位数: 27298654321维生素 A 的需求量至少 17500 个单位: 10317509645 654321 xxx维生素 C 的需求量至少 245 个单位:
16、2488654321烟酸的需求量至少 5 个单位数: 0.501.6030. 654321 xxx每周需供应 140 千克蔬菜,即 1421 每 份 所 含 营 养 素 单 位 数 每 千 克费 用 序号 蔬 菜 铁 磷 维 生 素 A 维 生 素 C 烟 酸 1 青 豆 0.45 10 415 8 0.30 5 2 胡 萝 卜 0.45 28 9065 3 0.35 5 3 菜 花 1.05 59 250 53 0.60 8 4 白 菜 0.40 25 75 27 0.15 2 5 甜 菜 0.50 2 15 5 0.25 6 6 土 豆 0.50 75 235 8 0.80 3 要 求 蔬
17、 菜 提 供 的 营 养 6.0 25 1750 245 5.0 39该问题的线性规划模型为:Min 654321 385xxxf s.t. 106546.04.0 54321 xxx27298654x1703165654321 xxx8736542 x.58.2.0.00. 654321 xxx0 40,i=1,6ix问题是满足营养素要求的条件下,所需费用最小,是一个线性规划模型。利用Matlab软件编程序:% 营养配餐ch61,文件名: ch61.mc=5;5;8;2;6;3;A=(-1)*1,1,1,1,1,1;0.45,0.45,1.05,0.40,0.50,0.50;10,28,59
18、,25,22,75;415,9065,2550,75,15,235;8,3,53,27,5,8;0.30,0.35,0.60,0.15,0.25,0.80;b=(-1)*140;6;25;17500;245;5;xLB=zeros(6,1);xUB=40;40;40;20;40;40;nEq=1;x0=0*ones(6,1);x=lp(c,A,b,xLB,xUB,x0,nEq);disp(青豆需要的份数)x(1)disp(胡罗卜需要的份数 )x(2)disp(菜花需要的份数 )40x(3)disp(白菜需要的份数 )x(4)disp(甜菜需要的份数 )x(5)disp(土豆需要的份数)x(6)
19、执行后输出青豆需要的份数ans =40胡罗卜需要的份数 ans =40.0000菜花需要的份数 ans =0白菜需要的份数 ans =20.0000甜菜需要的份数 ans =0土豆需要的份数ans =40最小费用 ans =560.000041习 题 3.11. 某厂生产三种产品I,II,III。每种产品要经过 两道工序加工。设该厂有两种规BA,格的设备能完成 工序,它们以 表示;有三种规格的设备能完成 工序,它们以A21,AB表示。产品I可在 任何一种规格设备上加工。产品II可在任何规格的 设备321,BB, A上加工,但完成 工序时,只能在 设备上加工;产品III只能在 与 设备上加工。1
20、 2A已知在各种机床设备的单件工时,原材料费,产品销售价格,各种设备有效台时以及满负荷操作时机床设备的费用如下表,要求安排最优的生产计划,使该厂利润最大。产 品设备I II III设备有效台时满负荷时的设备费用(元)1A21B235764710981211600010000400070004000300321250783200原料费(元/件)单 价(元/件)0.251.250.352.000.502.802. 有四个工人,要指派他们分别完成4项工作,每人做各项工作所消耗的时间如下表:工作工人 ABCD甲乙丙丁15192619182317212122162324181917问指派哪个人去完成哪项
21、工作,可使总的消耗时间为最小?423.2 整数规划在许多线性规划模型中,变量取整数时才有意义。例如,不可分解产品的数目,如汽车、房屋、飞机等,或只能用整数来记数的对象。这样的线性规划称为整数线性规划,简称整数规划,记为 IP。本节介绍的主要内容有:整数规划模型的建立以及求解,整数规划的计算机解法。3.2.1 整数规划模型的建立以及求解一、概论1. 定义规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。2. 整数规划的分类如不加特殊说明
22、,一般指整数线性规划。对于整数线性规划模型大致可分为两类:1、变量全限制为整数时,称纯(完全)整数规划。2、变量部分限制为整数的,称混合整数规划。3、变量只能取 0 或 1 时,称之为 0-1 整数规划。整数规划特点(i) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。整数规划无可行解。有可行解(当然就存在最优解) ,但最优解值一定不会优于原线性规划的最优值。(ii) 整数规划最优解不能按照实数最优解简单取整而获得。二、求解方法分类:(i)分枝定界法可求纯或混合整数线性规划。(ii)割平面法可求纯或混合整数线
23、性规划。(iii)隐枚举法求解 型整数规划:10过滤隐枚举法;分枝隐枚举法。43(iv)匈牙利法解决指派问题(“0-1”规划特殊情形) 。(v)蒙特卡洛法求解各种类型规划。下面将简要介绍常用的几种求解整数规划的方法。1.分枝定界法对有约束条件的最优化问题(其可行解为有限数)的可行解空间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题) ,这称为定界。在每次分枝后,凡是界限不优于已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。设有
24、最大化的整数规划问题 ,与它相应的线性规划为问题 ,从解问题 开始,AB若其最优解不符合 的整数条件,那么 的最优目标函数必是 的最优目标函数 的上BA*z界,记作 ;而 的任意可行解的目标函数值将是 的一个下界 。分枝定界法就是将zA*zz的可行域分成子区域再求其最大值的方法。逐步减小 和增大 ,最终求到 。现用下B *z例来说明:例 3 求解下述整数规划21904Maxxzs.t. 且 为 整 数,775621x解 (i)先不考虑整数限制,即解相应的线性规划 ,得最优解为:B35.879,816.,09.421 z可见它不符合整数条件。这时 是问题 的最优目标函数值 的上界,记作 。而A*
25、zz显然是问题 的一个整数可行解,这时 ,是 的一个下界,记作 ,即0,21x 0。356*z(ii)因为 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选21,x进行分枝,把可行集分成 2 个子集:1x,4.80951.8091x44因为 4 与 5 之间无整数,故这两个子集内的整数解必与原可行集合整数解一致。这一步称为分枝。这两个子集的规划及求解如下:问题 : 1B21904Maxxzs.t. 0,4075621x最优解为: 。39,.,.421zx问题 : 2B21Maxs.t. 0,57621x最优解为: 。4.3.,0.521zx再定界: 。49*z(iii)对问题 再进行分
26、枝得问题 和 ,它们的最优解为1B1B230,2,:11zx7.4,422再定界: ,并将 剪枝。30*z1B(iv)对问题 再进行分枝得问题 和 ,它们的最优解为2B2083,.x5.4,:12 z无可行解。将 剪枝。21,B于是可以断定原问题的最优解为: 340,4*21zx从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为:开始,将要求解的整数规划问题称为问题 ,将与它相应的线性规划问题称为问题A。B45(i)解问题 可能得到以下情况之一:B(a) 没有可行解,这时 也没有可行解,则停止A(b) 有最优解,并符合问题 的整数条件, 的最优解即为 的最优解,则停止。BA(c)
27、 有最优解,但不符合问题 的整数条件,记它的目标函数值为 。B z(ii)用观察法找问题 的一个整数可行解,一般可取 ,试探,求A njxj ,1,0得其目标函数值,并记作 。以 表示问题 的最优目标函数值;这时有z*A*进行迭代。第一步:分枝,在 的最优解中任选一个不符合整数条件的变量 ,其值为 ,以B jxjb表示小于 的最大整数。构造两个约束条件jbjb和 jjx1jjbx将这两个约束条件,分别加入问题 ,求两个后继规划问题 和 。不考虑整数条件求B1B2解这两个后继问题。定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界 。从已符合
28、整数条件的各分支中,找出目标函数值z为最大者作为新的下界 ,若无作用 。z0第二步:比较与剪枝,各分枝的最优目标函数中若有小于 者,则剪掉这枝,即以z后不再考虑了。若大于 ,且不符合整数条件,则重复第一步骤。一直到最后得到z为止。得最优整数解 。z* njx,1,*3.2.2 隐枚举法求解 型整数规划0隐枚举法是求解 型整数规划的方法之一,我们先介绍引入 变量的实际问题,10再研究隐枚举法。3.2.2.1 型整数规划10型整数规划是整数规划中的特殊情形,它的变量 仅取值 0 或 1。这时 称为jxjx46变量,或称二进制变量。 仅取值 0 或 1 这个条件可由下述约束条件: ,10jx 10j
29、x整数所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 变量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。10引入 变量的实际问题1)投资场所的选定相互排斥的计划例 4 某公司拟在市东、西、南三区建立门市部。拟议中有 7 个位置(点)可供选择。规定)7,2(iA在东区:由 三个点中至多选两个;321,A在西区:由 两个点中至少选一个;54在南区:由 两个点中至少选一个。76,如选用 点,设备投资估计为 元,每年可获利润估计为 元,但投资总额不能超过iAibic元。问应选择哪几个点可使年利润为最大?B解题时先引入 变量 ,令10)7,2(ix.0点 没
30、 被 选 中当 点 被 选 中当, ,iAi 7,21i于是问题可列写成:iixcz71Mas.t. 10,1276543217或iiixxBb2)相互排斥的约束条件 有两个相互排斥的约束条件或 。4521x453721x47为了统一在一个问题中,引入 变量 ,则上述约束条件可改写为:10y10)(45372或yMyx其中 是充分大的数。M 约束条件或 01x8051x可改写为1085或yy 如果有 个互相排斥的约束条件:mmibxanii ,211 为了保证这 个约束条件只有一个起作用,我们引入 个 变量 和一个m10),2(miy充分大的常数 ,而下面这一组 个约束条件M1(1)iybxa
31、iinii ,21 (2)就合于上述my的要求。这是因为,由于(2) , 个 中只有一个能取 0 值,设 ,代入(1) ,就miy0*iy只有 的约束条件起作用,而别的式子都是多余的。*i3.2.2.2 型整数规划解法之一(隐枚举法)10解 型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的 个组合。对于变量个数 较大(例如 ) ,这几乎是不可能的。因此常n2n10n设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法(Implicit Enumer
32、ation) ,分枝定界法也是一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的。下面举例说明一种解 型整数规划的隐枚举法。10例 5 3253Maxxz48s.t. 10,6434232121或xx求解思路及改进措施:(i) 先试探性求一个可行解,易看出 满足约束条件,故为一个可行解,)0,1(,(321x且相应的目标函数值为 。3z(ii) 因为是求极大值问题,故求最优解时,凡是目标值 的解不必检验是否满足约3z束条件即可删除,因它肯定不是最优解,于是应增加一个约束条件(目标值下界):,称该条件为过滤条件(Filtering Contraint)。从而原问题等价于:3
33、5231x321Maxzs.t. 10,6434532121或x)()(fedcba若用全部枚举法,3 个变量共有 8 种可能的组合,我们将这 8 种组合依次检验它是否满足条件(a)(e),对某个组合,若它不满足(a),即不满足过滤条件,则(b)(e)即可行性条件不必再检验;若它满足(a)(e)且相应的目标值严格大于 3,则进行(iii) 。(iii) 改进过滤条件。(iv) 由于对每个组合首先计算目标值以验证过滤条件,故应优先计算目标值 大的组z合,这样可提前抬高过滤门槛,以减少计算量。按上述思路与方法,例 5 的求解过程可由下表来表示:约束条件),(321x, 目标值a b c d e 过
34、滤条件)0,(0 13 35231x49)0,1(-2 5 52331x),(1018 8321x),(6 3从而得最优解 ,最优值 。)1,0(,(*21x8*z3.2.2.3 蒙特卡洛法(随机取样法)前面介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线性整数规划目前尚未有一种成熟而有效的求解方法,因为非线性规划本身的通用有效解法尚未找到,更何况是非线性整数规划。然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可
35、以证明,在一定的计算量的情况下,完全可以得出一个满意解。例 6 已知非线性整数规划为: 54321228 Maxxxzs.t. 205628),(90433154xii 对该题,目前尚无有效方法求出准确解。如果用显枚举法试探,共需计算 个105)(点,其计算量非常之大。然而应用蒙特卡洛去随机计算 个点,便可找到满意解,那么610这种方法的可信度究竟怎样呢?50下面就分析随机取样采集 个点计算时,应用概率理论来估计一下可信度。610不失一般性,假定一个整数规划的最优点不是孤立的奇点。假设目标函数落在高值区的概率分别为 0.01,0.00001,则当计算 个点后,有任一个610点能落在高值区的概率
36、分别为,多 位 )10(9.9.0110。5462解 (i)首先编写 M 文件 mente.m 定义目标函数 f 和约束向量函数 g,程序如下:function f,g=mengte(x);f=x(1)2+x(2)2+3*x(3)2+4*x(4)2+2*x(5)-8*x(1)-2*x(2)-3*x(3).-x(4)-2*x(5);g(1)=sum(x)-400;g(2)=x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800;g(3)=2*x(1)+x(2)+6*x(3)-200;g(4)=x(3)+x(4)+5*x(5)-200;(ii)编写如下程序求问题的解:rand(sta
37、te,sum(clock);p0=0;ticfor i=1:105x=99*rand(5,1);x1=floor(x);x2=ceil(x);f,g=mengte(x1);if sum(g=0)=4if p0=fx0=x1;p0=f;endendf,g=mengte(x2);51if sum(g=0)=4if p0=fx0=x2;p0=f;endendendx0,p0toc3.2.2.4 整数规划的计算机解法整数规划问题的求解可以使用 Lingo 等专用软件。对于一般的整数规划规划问题,无法直接利用 Matlab 的函数,必须利用 Matlab 编程实现分枝定界解法和割平面解法。但对于指派问题
38、等特殊的 整数规划问题或约束矩阵 是幺模矩阵时,有时可以直接10A利用 Matlab 的函数 linprog。例 7 求解下列指派问题,已知指派矩阵为109653248710解:编写 Matlab 程序如下:c=3 8 2 10 3;8 7 2 9 7;6 4 2 7 58 4 2 3 5;9 10 6 9 10;c=c(:);a=zeros(10,25);for i=1:5a(i,(i-1)*5+1:5*i)=1;a(5+i,i:5:25)=1;endb=ones(10,1);x,y=linprog(c,a,b,zeros(25,1),ones(25,1)52求得最优指派方案为 ,最优值为
39、21。1543215 xx习 题 3.21.某市场研究小组考虑下一步如何选择广告竞争计划,在进行大量的调查研究后,制定了各种可供选择的方案,方案的特征数字如下: 电 视 商 业 报 纸 电 台 流 行 推 销 总 共 可 杂 志 杂 志 运 动 用 资 源 影 响 人 数 ( 万 人 ) 10 20 30 40 45 45 费 用 ( 万 元 ) 50 15 30 25 25 10 180 需 设 计 人 员 ( 人 -时 ) 70 250 20 20 30 40 150 需 推 销 人 员 ( 人 -时 ) 20 10 10 10 10 100 120 广告计划的目的是使受影响的顾客数为最大
40、。上表所给出的资源限制(资金、设计员和推销员)外,还有如下约束条件:(1)如果决定发起推销运动,那么必须同时用电台或流行杂志配合;(2)公司不能同时在商业杂志和流行杂志上作广告。假定各种广告手段所影响的顾客不同,不重复(即每一顾客只受一种广告手段影响) ,问如何开展广告宣传?3.3 非线性规划非线性规划是线性规划的进一步发展和继续。许多实际问题如设计问题、经济平衡问题都属于非线性规划的范畴。非线性规划扩大了数学规划的应用范围,同时也给数学工作者提出了许多基本理论问题,使数学中的如凸分析、数值分析等也得到了发展。还有一种规划问题和时间有关,叫做“动态规划” 。近年来在工程控制、技术物理和通讯中的
41、最佳控制问题中,已经成为经常使用的重要工具。一、 非线性规划的实例与定义如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。下面通过实例归纳出非线性规划数学模型的一般形式,介绍有关非线性规划的基本概念。53例 1 (投资决策问题) 某企业有 个项目可供选择投资,并且至少要对其中一个项目投n资。已知该企业拥有总资金 元,投资于第 个项目需花费资金 元,并预计A(1,2)in ia可收益 元,试选择最佳投资方
42、案。 ib解 设投资决策变量为 , .则投资总额为1,0i ix决 定 投 资 第 个 项 目, 决 定 不 投 资 第 个 项 目 1,2in,投资总收益为 。因为该公司至少要对一个项目投资,并且总的投资金额不1niax1nib能超过总资金 ,故有限制条件为 .A10niaxA另外,由于 只取值 0 或 1,所以还有约束 .(1,2)ixn (1)0(1,2)iixn最佳投资方案应是投资额最小而总收益最大的方案,所以这个最佳投资决策问题归结为总资金以及决策变量(取 0 或 1)的限制条件下,极大化总收益和总投资之比。因此,其数学模型为: 11max.0,()2,.niiniiibQstAxn
43、上面例题是在一组等式或不等式的约束下,求一个函数的最大值(或最小值)问题,其中目标函数或约束条件中至少有一个非线性函数,这类问题称之为非线性规划问题,简记为(NLP) 。可概括为一般形式 min().0,12, ().jifxsthjqNLPgip其中 称为模型(NLP)的决策变量, 称为目标函数, ,12,Tnxx f()igx和 称为约束函数。另外, 称为等(,)ip (,jh1,2)q ()01,2ixp式约束, 称为不等式约束。 0jx54对于一个实际问题,在把它归结成非线性规划问题时,一般要注意如下几点: ( i )确定供选方案:首先要收集同问题有关的资料和数据,在全面熟悉问题的基础
44、上,确认什么是问题的可供选择的方案,并用一组变量来表示它们。 ( ii )提出追求目标:经过资料分析,根据实际需要和可能,提出要追求极小化或极大化的目标。并且,运用各种科学和技术原理,把它表示成数学关系式。 ( iii )给出价值标准:在提出要追求的目标之后,要确立所考虑目标的“好”或“坏”的价值标准,并用某种数量形式来描述它。 ( iv )寻求限制条件:由于所追求的目标一般都要在一定的条件下取得极小化或极大化效果,因此还需要寻找出问题的所有限制条件,这些条件通常用变量之间的一些不等式或等式来表示。 二、线性规划与非线性规划的区别如果线性规划的最优解存在,其最优解只能在其可行域的边界上达到(特
45、别是可行域的顶点上达到) ;而非线性规划的最优解(如果最优解存在)则可能在其可行域的任意一点达到。三、非线性规划的 Matlab 解法Matlab 中非线性规划的数学模型写成以下形式min().,()0,eqeqeqfxstAbBCx其中 是标量函数, 是相应维数的矩阵和向量, 是非线性向()fx,eqA(),eqCx量函数。 Matlab 中的命令是 :X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS) 它的返回值是向量 ,其中 FUN 是用 M 文件定义的函数 ;X0 是 的初始值;A, B, ()fxAeq, Beq 定义了线性约束 ,
46、 ,如果没有等式约束,则 A=,B=,Aeq=,AxbeqeqBBeq=;LB 和 UB 是变量 的下界和上界,如果上界和下界没有约束,则 LB=,UB=,如果 无下界,则 LB=-inf,如果 无上界,则 UB=inf;NONLCON 是用 M 文件定义的非线55性向量函数 , ;OPTIONS 定义了优化参数,可以使用 Matlab 缺省的参数设置。 ()Cxeq求下列非线性规划问题 2121min()8.0,.fstx( i )编写 M 文件 fun1.m function f=fun1(x); f=x(1)2+x(2)2+8; 和 M 文件 fun2.m function g,h=fu
47、n2(x); g=-x(1)2+x(2); h=-x(1)-x(2)2+2; %等式约束 ( ii )在 Matlab 的命令窗口依次输入 options=optimset; x,y=fmincon(fun1,rand(2,1),zeros(2,1), . fun2, options) 就可以求得当 , 时,最小值 .1x210y四、求解非线性规划的基本迭代格式记(NP)的可行域为 。若 ,并且,则称 是(NP)的整体最优解, 是(NP)的整体最优值。如果有则称 是(NP)的严格整体最优解, 是(NP)的严格整体最优值。若 ,并且存在 的邻域 ,使,56则称 是(NP)的局部最优解, 是(NP)的局部最优值。如果有则称 是(NP)的严格局部最优解, 是(NP)的严格局部最优值。由于线性规划的目标函数为线性函数,可行域为凸集,因而求出的最优解就