最优化理论期末练习题

《最优化方法》

习题一

1. 设 S={(x1,x2)∣x12−x2≤0,x12−2x1−x2+2≤0}S = \{(x_1, x_2) \mid x_1^2 - x_2 \leq 0, x_1^2 - 2x_1 - x_2 + 2 \leq 0\}S={(x1,x2)x12x20,x122x1x2+20}

(1) 求证:SSS 为凸集。

(2) 写出求 SSS 上与点 (5, 0)距离最小的点的优化问题模型。

2. 设 S1,S2S_1, S_2S1,S2 都是凸集,求证:

(1) S1∩S2S_1 \cap S_2S1S2 为凸集。

(2) S1+S2S_1 + S_2S1+S2 为凸集,其中 S1+S2={u+v∣u∈S1,v∈S2}S_1 + S_2 = \{u + v \mid u \in S_1, v \in S_2\}S1+S2={u+vuS1,vS2}

3. 优化模型:

min⁡f(x) \min f(x) minf(x)
s.t.x∈Ds.t. x \in Ds.t.xD

中,f(x)f(x)f(x) 为凸函数,DDD 为凸集,若 x∗x^*x 为局部最优解(即存在 δ>0\delta > 0δ>0,使得任意 x∈D∩{y∣d(x∗,y)≤δ}x \in D \cap \{y \mid d(x^*, y) \leq \delta\}xD{yd(x,y)δ},都有 f(x∗)≤f(x)f(x^*) \leq f(x)f(x)f(x) 成立),求证:x∗x^*x 为全局最优解。

4. 用长度为 500 厘米的条材,截成长度为 98 厘米和 78 厘米两种毛坯,要求共截出长 98 厘米的毛坯 1000 根、78 厘米长的毛坯 2000 根,应怎样截才能得所用的原材料最少?试建立该问题的数学模型。(建立模型即可)

5. 有一份中文说明书,需译成英、日、德、俄四种文字,分别计作 E、J、G、R。现有甲、乙、丙、丁四人,他们将中文说明书翻译成不同语种说明书所需时间(单位:h)如下表所示。若要求每一项翻译任务只分配给一个人去完成,每个人只接受一项任务,应指派何人去完成何工作,所需总时间最少?试建立该问题的数学模型。(建立模型即可)

人员任务EJGR
215134
1041415
9141613
78119

一般地,称函数表为效率矩阵或者系数矩阵,其元素 Cij>0C_{ij} > 0Cij>0 表示指派第 iii 人去完成第 jjj 项任务所需的时间,或完成任务的工作效率。

习题二

1. 问题的输入规模(0-1背包问题、TSP问题、装箱问题、约束机器排序问题)、估计范围

  • 0-1背包问题
    输入规模:物品数量 ( n ) 和背包容量 ( W )。
    估计范围:( n ) 通常在几十到几百之间,( W ) 可以是任意正整数,但通常与 ( n ) 相关。

  • 旅行商问题(TSP)
    输入规模:城市数量 ( n )。
    估计范围:( n ) 通常在几十到几百之间,具体取决于实际应用场景。

  • 装箱问题(Bin Packing)
    输入规模:物品数量 ( n ) 和箱子容量 ( C )。
    估计范围:( n ) 通常在几十到几百之间,( C ) 可以是任意正整数,但通常与物品大小相关。

  • 约束机器排序问题(Scheduling with Constraints)
    输入规模:任务数量 ( n ) 和机器数量 ( m )。
    估计范围:( n ) 和 ( m ) 通常在几十到几百之间,具体取决于实际应用场景。


2. 举例哪些是NPC问题、哪些是NPH问题?

  • NPC问题:既属于NP类又是NP难的问题,是NP问题中最“难”的一类。

  • NPH问题:至少和NP问题一样“难”的问题,但不一定属于NP类。

  • NPC问题(NP完全问题)

    • 0-1背包问题
    • 旅行商问题(TSP)
    • 装箱问题(Bin Packing)
    • 布尔可满足性问题(SAT)
    • 图着色问题(Graph Coloring)
  • NPH问题(NP难问题)

    • 停机问题(Halting Problem)
    • 最大团问题(Maximum Clique Problem)
    • 子集和问题(Subset Sum Problem)
    • 哈密顿路径问题(Hamiltonian Path Problem)

3. 物流配送问题分析

问题描述

在某物流中心有10台配送车辆,车辆的最大载重量均为10单位,需要向10个客户运送货物。物流中心的坐标为(0,0),客户的坐标和需求量如下表所示。要求合理安排配送车辆的行车路径,使配送的总里程数最短。

客户数据
客户编号横坐标x纵坐标y货物需求量
17252
210732
314543
41725
520514
620319
723316
8237910
927796
1030283
问题建模

这是一个典型的车辆路径问题(Vehicle Routing Problem, VRP),具体为带容量约束的VRP(CVRP)。目标是最小化总行驶里程,同时满足以下约束:

  1. 每辆车的载重量不超过10单位。
  2. 每个客户的需求必须被满足。
  3. 每辆车从物流中心出发并返回物流中心。
解决方法
  1. 精确算法:如分支定界法、动态规划,适用于小规模问题。
  2. 启发式算法:如最近邻算法、节约算法(Clarke-Wright算法),适用于中等规模问题。
  3. 元启发式算法:如遗传算法、模拟退火、蚁群算法,适用于大规模问题。
示例解决方案(启发式方法)
  1. 最近邻算法
    • 从物流中心出发,选择距离最近的未服务客户,直到车辆载重量达到上限。
    • 重复上述过程,直到所有客户被服务。
  2. 节约算法
    • 计算合并两条路径的节约值,优先合并节约值最大的路径。
    • 重复上述过程,直到所有客户被服务。

习题三

1. 求解下列线性规划问题:

  1. 最大化目标函数
    max⁡ −x1+3x2+x3 \max \ -x_1 + 3x_2 + x_3 max x1+3x2+x3
    约束条件:
    {3x1−x2+2x3≤7,−2x1+4x2≤12,−4x1+3x2+8x3≤10. \begin{cases} 3x_1 - x_2 + 2x_3 \leq 7, \\ -2x_1 + 4x_2 \leq 12, \\ -4x_1 + 3x_2 + 8x_3 \leq 10. \end{cases} 3x1x2+2x37,2x1+4x212,4x1+3x2+8x310.

  2. 最小化目标函数
    min⁡ −3x1−x2 \min \ -3x_1 - x_2 min 3x1x2
    约束条件:
    {3x1+3x2+x3=30,4x1−4x2+x4=16,2x1−x2≤12,x1,x2,x3≥0. \begin{cases} 3x_1 + 3x_2 + x_3 = 30, \\ 4x_1 - 4x_2 + x_4 = 16, \\ 2x_1 - x_2 \leq 12, \\ x_1, x_2, x_3 \geq 0. \end{cases} 3x1+3x2+x3=30,4x14x2+x4=16,2x1x212,x1,x2,x30.

  3. 最大化目标函数
    max⁡ 3x1−5x2 \max \ 3x_1 - 5x_2 max 3x15x2
    约束条件:
    {−x1+2x2+4x3≤4,x1+x2+2x3≤5,−x1+2x2+x3≥1,x1,x2,x3≥0. \begin{cases} -x_1 + 2x_2 + 4x_3 \leq 4, \\ x_1 + x_2 + 2x_3 \leq 5, \\ -x_1 + 2x_2 + x_3 \geq 1, \\ x_1, x_2, x_3 \geq 0. \end{cases} x1+2x2+4x34,x1+x2+2x35,x1+2x2+x31,x1,x2,x30.

  4. 最小化目标函数
    min⁡ x1−3x2+x3 \min \ x_1 - 3x_2 + x_3 min x13x2+x3
    约束条件:
    {2x1−x2+x3=8,2x1+x2≥2,x1+2x2≤10,x1,x2,x3≥0. \begin{cases} 2x_1 - x_2 + x_3 = 8, \\ 2x_1 + x_2 \geq 2, \\ x_1 + 2x_2 \leq 10, \\ x_1, x_2, x_3 \geq 0. \end{cases} 2x1x2+x3=8,2x1+x22,x1+2x210,x1,x2,x30.

  5. 最小化目标函数
    min⁡ 3x1−2x2+x3 \min \ 3x_1 - 2x_2 + x_3 min 3x12x2+x3
    约束条件:
    {2x1−3x2+x3=1,2x1+3x2≥8,x1,x2,x3≥0. \begin{cases} 2x_1 - 3x_2 + x_3 = 1, \\ 2x_1 + 3x_2 \geq 8, \\ x_1, x_2, x_3 \geq 0. \end{cases} 2x13x2+x3=1,2x1+3x28,x1,x2,x30.

  6. 最小化目标函数
    min⁡ 2x1−3x2 \min \ 2x_1 - 3x_2 min 2x13x2
    约束条件:
    {2x1−x2−x3≥3,x1−x2+x3≥2,x1,x2,x3≥0. \begin{cases} 2x_1 - x_2 - x_3 \geq 3, \\ x_1 - x_2 + x_3 \geq 2, \\ x_1, x_2, x_3 \geq 0. \end{cases} 2x1x2x33,x1x2+x32,x1,x2,x30.

2. 若线性规划的可行域非空,则最优解有哪些情况,这些解分别会出现在可行域的什么位置?

当线性规划的可行域非空时,最优解可能出现以下几种情况:

  1. 唯一最优解

    • 情况:目标函数在可行域中只有一个点达到最优值。
    • 位置:通常出现在可行域的顶点(极点)上。
  2. 无穷多最优解

    • 情况:目标函数在可行域中的多个点(通常是一条边或一个面)上达到相同的最优值。
    • 位置:出现在可行域的一条边、一个面或更高维的几何结构上。
  3. 无界解

    • 情况:目标函数在可行域中可以无限增大(对于最大化问题)或无限减小(对于最小化问题)。
    • 位置:通常出现在可行域无界的情况下,目标函数沿着某个方向无限延伸。
  4. 无可行解

    • 情况:虽然题目假设可行域非空,但在某些情况下,约束条件可能导致可行域为空。
    • 位置:无可行解时,不存在最优解。

3. 用 MATLAB 和 Python 求解线性规划问题的命令

MATLAB

MATLAB 中使用 linprog 函数求解线性规划问题。
基本语法

[x, fval] = linprog(f, A, b, Aeq, beq, lb, ub);
  • f:目标函数的系数向量(列向量)。
  • A:不等式约束的系数矩阵。
  • b:不等式约束的右侧向量。
  • Aeq:等式约束的系数矩阵。
  • beq:等式约束的右侧向量。
  • lb:变量的下界。
  • ub:变量的上界。
  • x:最优解。
  • fval:目标函数的最优值。

示例

f = [-1; 3; 1]; % 目标函数系数
A = [3, -1, 2; -2, 4, 0; -4, 3, 8]; % 不等式约束系数矩阵
b = [7; 12; 10]; % 不等式约束右侧向量
[x, fval] = linprog(f, A, b);

Python

Python 中使用 scipy.optimize.linprog 函数求解线性规划问题。
基本语法

from scipy.optimize import linprog

res = linprog(c, A_ub=A, b_ub=b, A_eq=Aeq, b_eq=beq, bounds=bounds)
  • c:目标函数的系数向量(行向量)。
  • A:不等式约束的系数矩阵。
  • b:不等式约束的右侧向量。
  • Aeq:等式约束的系数矩阵。
  • beq:等式约束的右侧向量。
  • bounds:变量的上下界(例如 [(0, None), (0, None)] 表示变量非负)。
  • res.x:最优解。
  • res.fun:目标函数的最优值。

示例

from scipy.optimize import linprog

c = [-1, 3, 1]  # 目标函数系数
A = [[3, -1, 2], [-2, 4, 0], [-4, 3, 8]]  # 不等式约束系数矩阵
b = [7, 12, 10]  # 不等式约束右侧向量
res = linprog(c, A_ub=A, b_ub=b)
print(res.x)  # 最优解
print(res.fun)  # 最优值

4.尝试写一个线性规划两阶段法的算法程序。(选做)

习题四

1. 判断点 xˉ=(0,2)T\bar{x} = (0, 2)^Txˉ=(0,2)T是否为 K-T 点

问题描述
min⁡(x1−94)2+(x2−2)2 \min \left( x_1 - \frac{9}{4} \right)^2 + (x_2 - 2)^2 min(x149)2+(x22)2
约束条件:
{−x12+x2≥0,x1+x2≤6,x1,x2≥0. \begin{cases} -x_1^2 + x_2 \geq 0, \\ x_1 + x_2 \leq 6, \\ x_1, x_2 \geq 0. \end{cases} x12+x20,x1+x26,x1,x20.


2. 求非线性规划问题的 K-T 点

min⁡x12−x2−3x3 \min x_1^2 - x_2 - 3x_3 minx12x23x3
约束条件:
{−x1−x2−x3≥0,x12+2x2−x3=0. \begin{cases} -x_1 - x_2 - x_3 \geq 0, \\ x_1^2 + 2x_2 - x_3 = 0. \end{cases} {x1x2x30,x12+2x2x3=0.


3. 已知非线性规划问题

min⁡f(x)=x12+2x22+6x32+2x1x2+4x1x3+2x2x3 \min f(x) = x_1^2 + 2x_2^2 + 6x_3^2 + 2x_1x_2 + 4x_1x_3 + 2x_2x_3 minf(x)=x12+2x22+6x32+2x1x2+4x1x3+2x2x3
约束条件:
{x12+x22≤0.4,x1+2x22+x3=1.4,x1≥0,x2≥0. \begin{cases} x_1^2 + x_2^2 \leq 0.4, \\ x_1 + 2x_2^2 + x_3 = 1.4, \\ x_1 \geq 0, \\ x_2 \geq 0. \end{cases} x12+x220.4,x1+2x22+x3=1.4,x10,x20.

  1. 求函数的梯度和 Hesse 阵。
  2. 证明 fff 是凸函数。
  3. 写出该问题的拉格朗日函数。
  4. 判断 X=(0.2,0.6,0)TX = (0.2, 0.6, 0)^TX=(0.2,0.6,0)T是否为原问题的 K-T 点。

优化算法

以下是 禁忌搜索算法模拟退火算法遗传算法群智能算法 的整理,包括基本思想、原理、步骤、计算复杂度和适用问题规模。

1. 禁忌搜索算法(Tabu Search)

基本思想

通过引入 禁忌表 来避免搜索过程中的重复和局部最优解,从而探索更广泛的解空间。

原理
  • 使用禁忌表记录最近访问过的解,禁止在一定迭代次数内重复访问。
  • 通过 藐视准则 允许在某些情况下打破禁忌,避免错过更好的解。
步骤
  1. 初始化当前解和禁忌表。
  2. 生成当前解的邻域解。
  3. 选择不在禁忌表中的最优邻域解作为新解。
  4. 更新禁忌表和当前解。
  5. 重复步骤 2-4 直到满足终止条件。
计算复杂度
  • 时间复杂度:取决于邻域大小和迭代次数,通常为 ( O(k \cdot n) ),其中 ( k ) 是迭代次数,( n ) 是邻域大小。
  • 空间复杂度:主要用于存储禁忌表,通常为 ( O(m) ),其中 ( m ) 是禁忌表大小。
适用问题规模
  • 适用于中小规模组合优化问题,如 TSP、调度问题等。

2. 模拟退火算法(Simulated Annealing)

基本思想

模拟物理退火过程,通过接受劣解的概率跳出局部最优解,逐步收敛到全局最优解。

原理
  • 在搜索过程中以一定概率接受劣解,概率随温度降低而减小。
  • 温度参数控制搜索的随机性,初始高温时接受劣解的概率较高,逐步降温后趋于稳定。
步骤
  1. 初始化当前解和温度参数。
  2. 生成当前解的邻域解。
  3. 计算邻域解与当前解的目标函数差值。
  4. 根据 Metropolis 准则决定是否接受邻域解。
  5. 降低温度,重复步骤 2-4 直到满足终止条件。
计算复杂度
  • 时间复杂度:取决于温度下降速度和迭代次数,通常为 ( O(k \cdot n) ),其中 ( k ) 是迭代次数,( n ) 是邻域大小。
  • 空间复杂度:主要用于存储当前解和邻域解,通常为 ( O(1) )。
适用问题规模
  • 适用于中小规模组合优化问题,如 TSP、函数优化等。

3. 遗传算法(Genetic Algorithm)

基本思想

模拟生物进化过程,通过选择、交叉和变异操作生成新解,逐步优化种群。

原理
  • 使用 种群 表示一组解,通过 适应度函数 评估解的质量。
  • 通过 选择交叉变异 操作生成新一代种群。
步骤
  1. 初始化种群。
  2. 计算种群中每个个体的适应度。
  3. 选择适应度高的个体作为父代。
  4. 对父代进行交叉和变异操作生成子代。
  5. 更新种群,重复步骤 2-4 直到满足终止条件。
计算复杂度
  • 时间复杂度:取决于种群大小和迭代次数,通常为 ( O(k \cdot m \cdot n) ),其中 ( k ) 是迭代次数,( m ) 是种群大小,( n ) 是解的长度。
  • 空间复杂度:主要用于存储种群,通常为 ( O(m \cdot n) )。
适用问题规模
  • 适用于中小规模组合优化问题,如 TSP、函数优化等。

4. 群智能算法(Swarm Intelligence Algorithms)

基本思想

模拟群体生物(如鸟群、鱼群、蚁群)的行为,通过个体和群体的协作寻找最优解。

常见算法
  • 蚁群算法(Ant Colony Optimization, ACO)
    • 模拟蚂蚁觅食行为,通过信息素更新路径。
    • 步骤:初始化信息素 → 蚂蚁构建路径 → 更新信息素 → 迭代。
  • 粒子群算法(Particle Swarm Optimization, PSO)
    • 模拟鸟群或鱼群行为,通过个体和群体协作寻找最优解。
    • 步骤:初始化粒子 → 更新速度和位置 → 迭代。
计算复杂度
  • 蚁群算法
    • 时间复杂度:( O(k \cdot m \cdot n) ),其中 ( k ) 是迭代次数,( m ) 是蚂蚁数量,( n ) 是问题规模。
    • 空间复杂度:( O(n^2) ),用于存储信息素矩阵。
  • 粒子群算法
    • 时间复杂度:( O(k \cdot m \cdot n) ),其中 ( k ) 是迭代次数,( m ) 是粒子数量,( n ) 是问题规模。
    • 空间复杂度:( O(m \cdot n) ),用于存储粒子的位置和速度。
适用问题规模
  • 适用于中小规模组合优化问题,如 TSP、函数优化等。

总结

算法基本思想原理步骤计算复杂度适用问题规模
禁忌搜索算法避免重复搜索,跳出局部最优使用禁忌表和藐视准则初始化 → 生成邻域解 → 选择新解 → 更新时间 ( O(k \cdot n) )中小规模组合优化问题
模拟退火算法模拟退火过程,接受劣解温度控制和 Metropolis 准则初始化 → 生成邻域解 → 接受新解 → 降温时间 ( O(k \cdot n) )中小规模组合优化问题
遗传算法模拟生物进化,选择、交叉、变异适应度函数和进化操作初始化种群 → 选择 → 交叉 → 变异 → 更新时间 ( O(k \cdot m \cdot n) )中小规模组合优化问题
群智能算法模拟群体生物行为,协作寻找最优解信息素更新(蚁群)或粒子协作(粒子群)初始化 → 更新信息素或粒子位置 → 迭代时间 ( O(k \cdot m \cdot n) )中小规模组合优化问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值