【优化模型】优化建模与计算
1、优化模型的基本概念
1.1 优化模型和算法的重要意义
最优化: 在一定条件下,寻求使目标最大(小)的决策
最优化问题普遍存在于工程技术、经济管理、科学研究以及社会生活的各个领域中。例如,在结构设计方面涉及空间布局的合理安排,在资源分配方面需要考虑效率的最大化,在生产计划中追求成本的降低,在运输方案中寻求路径的优化。
1.2 解决优化问题的手段
- 经验积累,主观判断
- 作试验,比优劣
- 建立数学模型,求解最优策略
1.3 优化问题三要素
决策变量;
目标函数;
约束条件;

(1)无 约束优化(没有约束)与约束优化(有约束)
(2)可行解(只满足约束)与最优解(取到最优值)
2、局部最优解与整体最优解

局部最优解 (Local Optimal Solution, 如 x 1 )
整体最优解 (Global Optimal Solution, 如 x 2 )
3、优化模型的简单分类
3.1 连续优化
(1)线性规划(LP) 目标和约束均为线性函数
(2)非线性规划(NLP) 目标或约束中存在非线性函数
(3)二次规划(QP) 目标为二次函数、约束为线性
(4)整数规划(IP) 决策变量(全部或部分)为整数
3.2 离散优化
整数线性规划(ILP),整数非线性规划(INLP)
纯整数规划(PIP), 混合整数规划(MIP)
一般整数规划,0-1(整数)规划
3.3 优化模型的简单分类和求解难度

4、优化模型实例
例1:线性规划模型**(LP)**


例2:二次规划模型**(QP)**

若还要求产量为整数,则是整数二次规划模型**(IQP)。**
例3:非线性规划模型**(NLP)**


更多的优化问题:

**应用广泛:**生产与运营管理、经济学与金融学、图论及其网络优化、目标规划模型、博弈论、排队分析以及库存管理等。此外还包括更为复杂的决策场景。
实际问题规模往往较大,用软件求解比较方便。
5、常用优化软件
1. LINDO/LINGO
是一种高效的数学规划求解器,在线性规划和非线性规划方面具有强大的求解能力。2. MATLAB 优化工具箱/ Mathematic 的优化功能
MATLAB 提供了丰富的数学建模和求解工具包,并特别强调了其在数值计算和工程优化方面的卓越性能。3. SAS(统计分析) 软件的优化功能
作为专业的统计分析平台,SAS 提供了广泛的数据挖掘和预测分析功能。4. EXCEL 软件的优化功能
EXCEL 在数据管理和自动化处理方面表现突出,支持复杂的计算和图表生成。5. 其他(如 CPLEX 等)
此外,在这一领域中还有其他优秀的求解器如 CPLEX 和 Gurobi 等。
MATLAB优化工具箱能求解的优化模型:

LINDO/LINGO****软件能求解的模型:

建模时需要注意的几个基本问题 :
1**、**尽量使用实数优化,减少整数约束和整数变量
2**、**尽量使用光滑优化,减少非光滑约束的个数
如:尽量少使用绝对值、符号函数、多个变量求最大**/**最小值、四舍五入、取整函数等
3**、**尽量使用线性模型,减少非线性约束和非线性变量的个数
4**、**合理设定变量上下界,尽可能给出变量初始值
5**、**模型中使用的参数数量级要适当
LINGO**:**
熟悉集合(SETS)的基本应用方法;
学会如何正确解读求解报告,并着重掌握敏感性分析的方法论;
深入理解并准确解读求解状态窗口的各种信息;
熟练掌握如何与外部文件建立基本的交互连接;
了解并能够合理配置基本的求解选项设置;
线性规划模型(LP):

model:
max = 72*x1+64*x2;
[milk] x1 + x2<50;
[time] 12*x1+8*x2<480;
[cpct] 3*x1<100;
end
代码解读
LINGO****的语法规定:
( 1 )求目标函数的最大值或最小值分别用 MAX=… 或 MIN=… 来表示;
( 2 )每个语句必须以分号“;”结束,每行可以有许多语句,语句可以跨行;
( 3 )变量名称必须以字母 (A~Z) 开头,由字母、数字 (0~9) 和下划线所组成,长度不超过 32 个字符,不区分大小写;
( 4 )可以给语句加上标号,例如 [OBJ]MAX=200X1+300X2 ;
( 5 )以惊叹号“!”开头,以分号“;”结束的语句是注释语句 ;
( 6 )如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;
( 7 ) LINGO 模型以语句“ MODEL :”开头,以“ END” 结束,对于比较简单的模型,这两个语句可以省略。
0-1****规划模型 :

Model:
MIN=66.8*x11+75.6*x12+87*x13+58.6*x14
+… …
+67.4*x51+71 * x52+83.8*x53+62.4*x54;
x11+x12+x13+x14 <=1;
… …
x41+x42+x43+x44 <=1;
x11+x21+x31+x41+x51 =1;
… …
x14+x24+x34+x44+x54 =1;
@BIN(x11);@BIN(x12);… @BIN(x54);
END
代码解读
应用 LINGO 集合编程 求解:
MODEL:
sets:
person/1..5/;
position/1..4/;
link(person,position): c, x;
endsets
data:
c= 66.8, 75.6, 87, 58.6,
57.2, 66, 66.4, 53,
78, 67.8, 84.6, 59.4,
70, 74.2, 69.6, 57.2,
67.4, 71, 83.8, 62.4;
enddata
min=@sum(link: c*x);
@for(person(i):
@sum(position(j):x(i,j))<=1;);
@for(position(i):
@sum(person(j):x(j,i))=1;);
@for(link: @bin(x));
END
代码解读
