027 《优化理论:全面与深度解析 (Optimization Theory: A Comprehensive and In-depth Analysis)》
🌟🌟🌟本文案由Gemini 2.0 Flash Thinking Experimental 01-21创作,用来辅助学习知识。🌟🌟🌟
书籍大纲
▮▮▮▮ 1. chapter 1: 绪论 (Introduction)
▮▮▮▮▮▮▮ 1.1 什么是优化 (What is Optimization)
▮▮▮▮▮▮▮ 1.2 优化的应用领域 (Application Areas of Optimization)
▮▮▮▮▮▮▮ 1.3 优化问题的分类 (Classification of Optimization Problems)
▮▮▮▮▮▮▮ 1.4 优化问题的基本要素 (Basic Elements of Optimization Problems)
▮▮▮▮▮▮▮▮▮▮▮ 1.4.1 决策变量 (Decision Variables)
▮▮▮▮▮▮▮▮▮▮▮ 1.4.2 目标函数 (Objective Function)
▮▮▮▮▮▮▮▮▮▮▮ 1.4.3 约束条件 (Constraints)
▮▮▮▮ 2. chapter 2: 数学基础 (Mathematical Foundations)
▮▮▮▮▮▮▮ 2.1 线性代数基础 (Basics of Linear Algebra)
▮▮▮▮▮▮▮▮▮▮▮ 2.1.1 向量与矩阵 (Vectors and Matrices)
▮▮▮▮▮▮▮▮▮▮▮ 2.1.2 线性空间与子空间 (Linear Spaces and Subspaces)
▮▮▮▮▮▮▮▮▮▮▮ 2.1.3 特征值与特征向量 (Eigenvalues and Eigenvectors)
▮▮▮▮▮▮▮ 2.2 微积分基础 (Basics of Calculus)
▮▮▮▮▮▮▮▮▮▮▮ 2.2.1 导数与梯度 (Derivatives and Gradients)
▮▮▮▮▮▮▮▮▮▮▮ 2.2.2 泰勒展开 (Taylor Expansion)
▮▮▮▮▮▮▮▮▮▮▮ 2.2.3 凸函数与凹函数 (Convex and Concave Functions)
▮▮▮▮▮▮▮ 2.3 凸分析基础 (Basics of Convex Analysis)
▮▮▮▮▮▮▮▮▮▮▮ 2.3.1 凸集 (Convex Sets)
▮▮▮▮▮▮▮▮▮▮▮ 2.3.2 凸函数的性质 (Properties of Convex Functions)
▮▮▮▮▮▮▮▮▮▮▮ 2.3.3 凸优化问题 (Convex Optimization Problems)
▮▮▮▮ 3. chapter 3: 线性规划 (Linear Programming)
▮▮▮▮▮▮▮ 3.1 线性规划问题建模 (Modeling Linear Programming Problems)
▮▮▮▮▮▮▮ 3.2 图解法 (Graphical Method)
▮▮▮▮▮▮▮ 3.3 单纯形法 (Simplex Method)
▮▮▮▮▮▮▮▮▮▮▮ 3.3.1 基本可行解 (Basic Feasible Solution)
▮▮▮▮▮▮▮▮▮▮▮ 3.3.2 单纯形法的迭代步骤 (Iterative Steps of Simplex Method)
▮▮▮▮▮▮▮ 3.4 对偶理论 (Duality Theory)
▮▮▮▮▮▮▮▮▮▮▮ 3.4.1 对偶问题的构建 (Formulation of Dual Problem)
▮▮▮▮▮▮▮▮▮▮▮ 3.4.2 强对偶与弱对偶 (Strong and Weak Duality)
▮▮▮▮▮▮▮ 3.5 灵敏度分析 (Sensitivity Analysis)
▮▮▮▮ 4. chapter 4: 无约束优化 (Unconstrained Optimization)
▮▮▮▮▮▮▮ 4.1 无约束优化问题概述 (Overview of Unconstrained Optimization Problems)
▮▮▮▮▮▮▮ 4.2 最优性条件 (Optimality Conditions)
▮▮▮▮▮▮▮▮▮▮▮ 4.2.1 一阶必要条件 (First-Order Necessary Condition)
▮▮▮▮▮▮▮▮▮▮▮ 4.2.2 二阶充分条件 (Second-Order Sufficient Condition)
▮▮▮▮▮▮▮ 4.3 梯度下降法 (Gradient Descent Method)
▮▮▮▮▮▮▮▮▮▮▮ 4.3.1 固定步长梯度下降 (Fixed Step Size Gradient Descent)
▮▮▮▮▮▮▮▮▮▮▮ 4.3.2 线搜索 (Line Search)
▮▮▮▮▮▮▮ 4.4 牛顿法 (Newton's Method)
▮▮▮▮▮▮▮ 4.5 共轭梯度法 (Conjugate Gradient Method)
▮▮▮▮ 5. chapter 5: 约束优化 (Constrained Optimization)
▮▮▮▮▮▮▮ 5.1 约束优化问题概述 (Overview of Constrained Optimization Problems)
▮▮▮▮▮▮▮ 5.2 拉格朗日乘子法 (Lagrange Multiplier Method)
▮▮▮▮▮▮▮▮▮▮▮ 5.2.1 等式约束优化 (Equality Constrained Optimization)
▮▮▮▮▮▮▮▮▮▮▮ 5.2.2 不等式约束优化 (Inequality Constrained Optimization)
▮▮▮▮▮▮▮ 5.3 KKT条件 (Karush-Kuhn-Tucker Conditions)
▮▮▮▮▮▮▮ 5.4 对偶理论 (Duality Theory)
▮▮▮▮▮▮▮▮▮▮▮ 5.4.1 拉格朗日对偶 (Lagrange Dual)
▮▮▮▮▮▮▮▮▮▮▮ 5.4.2 强对偶性与Slater条件 (Strong Duality and Slater's Condition)
▮▮▮▮ 6. chapter 6: 非线性规划 (Nonlinear Programming)
▮▮▮▮▮▮▮ 6.1 非线性规划问题建模 (Modeling Nonlinear Programming Problems)
▮▮▮▮▮▮▮ 6.2 序列二次规划法 (Sequential Quadratic Programming, SQP)
▮▮▮▮▮▮▮ 6.3 内点法 (Interior Point Method)
▮▮▮▮▮▮▮ 6.4 可行方向法 (Feasible Direction Method)
▮▮▮▮ 7. chapter 7: 整数规划 (Integer Programming)
▮▮▮▮▮▮▮ 7.1 整数规划问题概述 (Overview of Integer Programming Problems)
▮▮▮▮▮▮▮ 7.2 分支定界法 (Branch and Bound Method)
▮▮▮▮▮▮▮ 7.3 割平面法 (Cutting Plane Method)
▮▮▮▮▮▮▮ 7.4 0-1整数规划 (0-1 Integer Programming)
▮▮▮▮ 8. chapter 8: 动态规划 (Dynamic Programming)
▮▮▮▮▮▮▮ 8.1 动态规划基本原理 (Basic Principles of Dynamic Programming)
▮▮▮▮▮▮▮▮▮▮▮ 8.1.1 最优子结构 (Optimal Substructure)
▮▮▮▮▮▮▮▮▮▮▮ 8.1.2 重叠子问题 (Overlapping Subproblems)
▮▮▮▮▮▮▮ 8.2 动态规划建模 (Modeling with Dynamic Programming)
▮▮▮▮▮▮▮ 8.3 经典动态规划问题 (Classic Dynamic Programming Problems)
▮▮▮▮▮▮▮▮▮▮▮ 8.3.1 背包问题 (Knapsack Problem)
▮▮▮▮▮▮▮▮▮▮▮ 8.3.2 最长公共子序列 (Longest Common Subsequence)
▮▮▮▮ 9. chapter 9: 随机优化 (Stochastic Optimization)
▮▮▮▮▮▮▮ 9.1 随机优化问题概述 (Overview of Stochastic Optimization Problems)
▮▮▮▮▮▮▮ 9.2 随机梯度下降法 (Stochastic Gradient Descent, SGD)
▮▮▮▮▮▮▮ 9.3 模拟退火算法 (Simulated Annealing)
▮▮▮▮▮▮▮ 9.4 遗传算法 (Genetic Algorithm)
▮▮▮▮ 10. chapter 10: 多目标优化 (Multi-objective Optimization)
▮▮▮▮▮▮▮ 10.1 多目标优化问题概述 (Overview of Multi-objective Optimization Problems)
▮▮▮▮▮▮▮ 10.2 Pareto最优 (Pareto Optimality)
▮▮▮▮▮▮▮ 10.3 多目标优化方法 (Multi-objective Optimization Methods)
▮▮▮▮▮▮▮▮▮▮▮ 10.3.1 加权和法 (Weighted Sum Method)
▮▮▮▮▮▮▮▮▮▮▮ 10.3.2 ε-约束法 (ε-Constraint Method)
▮▮▮▮ 11. chapter 11: 优化算法的实现与应用 (Implementation and Application of Optimization Algorithms)
▮▮▮▮▮▮▮ 11.1 常用优化软件介绍 (Introduction to Common Optimization Software)
▮▮▮▮▮▮▮▮▮▮▮ 11.1.1 MATLAB Optimization Toolbox
▮▮▮▮▮▮▮▮▮▮▮ 11.1.2 Python SciPy Optimize
▮▮▮▮▮▮▮ 11.2 优化算法在机器学习中的应用 (Application of Optimization Algorithms in Machine Learning)
▮▮▮▮▮▮▮▮▮▮▮ 11.2.1 模型训练与参数优化 (Model Training and Parameter Optimization)
▮▮▮▮▮▮▮▮▮▮▮ 11.2.2 正则化方法 (Regularization Methods)
▮▮▮▮▮▮▮ 11.3 优化算法在工程领域的应用 (Application of Optimization Algorithms in Engineering)
▮▮▮▮▮▮▮▮▮▮▮ 11.3.1 结构优化 (Structural Optimization)
▮▮▮▮▮▮▮▮▮▮▮ 11.3.2 控制系统优化 (Control System Optimization)
▮▮▮▮ 12. chapter 12: 前沿专题与未来展望 (Frontier Topics and Future Perspectives)
▮▮▮▮▮▮▮ 12.1 大规模优化 (Large-scale Optimization)
▮▮▮▮▮▮▮ 12.2 分布式优化 (Distributed Optimization)
▮▮▮▮▮▮▮ 12.3 优化算法的最新进展 (Latest Advances in Optimization Algorithms)
▮▮▮▮▮▮▮ 附录A: 参考文献 (References)
▮▮▮▮▮▮▮ 附录B: 术语表 (Glossary)
▮▮▮▮▮▮▮ 附录C: 索引 (Index)
1. chapter 1: 绪论 (Introduction)
1.1 什么是优化 (What is Optimization)
优化 (Optimization),从其本质上来说,是一种决策过程,其核心目标是在给定的条件下,通过调整可控的变量,使得某些性能指标达到最优,这里的最优通常指的是最大化或最小化。在日常生活中,我们无时无刻不在进行着各种形式的优化,例如,规划最佳的上班路线以节省时间,选择最划算的商品以节省金钱,调整烹饪参数以获得最佳的菜肴口感等等。在科学研究和工程实践中,优化更是扮演着至关重要的角色,它是提高效率、降低成本、提升性能的关键手段。
更 формально (formally) 地说,优化问题可以被定义为:在一个允许的可行域内,寻找使得目标函数取得极值(最大值或最小值)的决策变量的取值。这个过程就好比在地图上寻找海拔最高的山峰(最大化问题)或者地势最低的盆地(最小化问题),而可行域则限定了我们搜索的范围。
为了更清晰地理解优化的概念,我们可以从以下几个关键点进行把握:
① 目标 (Objective):优化必须有一个明确的目标,即我们希望最大化或最小化的量。这个目标通常可以用一个目标函数 (objective function) 来量化表示。例如,在生产计划问题中,目标可以是最大化利润;在资源分配问题中,目标可以是最小化成本;在机器学习模型训练中,目标可以是最小化预测误差。
② 约束 (Constraints):优化通常是在一定的约束条件下进行的。这些约束条件限定了决策变量 (decision variables) 的取值范围,确保 решения (solutions) 的可行性。约束可以是等式约束,例如,资源总量限制;也可以是不等式约束,例如,产品质量指标要求。约束条件定义了可行域 (feasible region),只有满足所有约束条件的 решения (solutions) 才是可行的。
③ 决策变量 (Decision Variables):决策变量 是优化问题中可以控制和调整的因素,通过改变决策变量的取值,我们可以影响目标函数的值。例如,在生产计划问题中,决策变量可以是各种产品的产量;在投资组合优化问题中,决策变量可以是各种资产的投资比例;在控制系统设计中,决策变量可以是控制参数。
④ 最优解 (Optimal Solution):最优解 是指在可行域内,使得目标函数取得最优值的决策变量的取值。最优解可以是全局最优解 (global optimal solution),即在整个可行域内目标函数值最优;也可以是局部最优解 (local optimal solution),即在可行域的局部范围内目标函数值最优。对于非凸优化问题,局部最优解可能不是全局最优解,找到全局最优解通常更具挑战性。
总而言之,优化是一个通过数学建模和算法求解,从众多可行方案中选择最佳方案的过程。它涉及到问题的定义、模型的建立、算法的选择和 решения (solution) 的评估等多个环节,是现代科学和工程技术中不可或缺的重要工具。
1.2 优化的应用领域 (Application Areas of Optimization)
优化理论和方法广泛应用于各个领域,从科学研究到工程实践,从经济管理到日常生活,几乎所有需要进行决策和资源分配的领域都离不开优化。以下列举一些典型的应用领域,以展示优化的广泛性和重要性:
① 工程设计 (Engineering Design):在工程领域,优化被广泛应用于各种设计问题,例如:
⚝ 结构优化 (Structural Optimization):设计桥梁、建筑、汽车、飞机等结构的形状和材料分布,以在满足强度、刚度等约束条件下,最小化重量、成本或最大化性能。例如,设计轻量化汽车车身,提高燃油效率和安全性。
⚝ 控制系统优化 (Control System Optimization):设计控制器参数,使得控制系统能够快速、稳定、精确地达到期望的状态,例如,飞行器姿态控制、机器人运动控制、工业过程控制等。例如,设计无人机的飞行控制算法,实现精准悬停和轨迹跟踪。
⚝ 电路设计优化 (Circuit Design Optimization):设计集成电路、滤波器、放大器等电子器件的参数,以最小化功耗、面积,最大化性能指标,例如,设计低功耗芯片,延长移动设备电池续航时间。
⚝ 化工过程优化 (Chemical Process Optimization):优化化工生产过程的工艺参数,例如,反应温度、压力、配料比例等,以提高产品产量、质量,降低能耗和排放。例如,优化炼油厂的生产流程,提高原油利用率和减少污染物排放。
② 运筹学与管理科学 (Operations Research and Management Science):优化是运筹学和管理科学的核心工具,用于解决资源分配、生产计划、物流运输、库存管理等问题:
⚝ 生产计划优化 (Production Planning Optimization):制定最优的生产计划,确定各种产品的产量、生产时间和生产顺序,以在满足市场需求和资源约束条件下,最大化利润或最小化成本。例如,制造企业制定月度生产计划,平衡生产能力和市场需求。
⚝ 物流优化 (Logistics Optimization):优化货物运输路线、车辆调度、仓库选址等,以降低运输成本、提高运输效率、缩短交货时间。例如,电商平台优化配送网络,实现快速高效的商品配送。
⚝ 库存管理优化 (Inventory Management Optimization):确定最优的库存水平和订货策略,以平衡库存成本和缺货成本,满足客户需求。例如,零售企业优化库存管理,减少库存积压和缺货风险。
⚝ 资源分配优化 (Resource Allocation Optimization):在有限的资源条件下,将资源合理分配到不同的用途,以最大化效益或最小化损失。例如,政府部门分配财政预算,优化公共资源配置。
③ 经济金融 (Economics and Finance):优化在经济金融领域也扮演着重要角色,用于投资组合优化、风险管理、定价模型等方面:
⚝ 投资组合优化 (Portfolio Optimization):选择最优的资产组合,在给定的风险承受能力下,最大化投资收益,或在给定的收益目标下,最小化投资风险。例如,基金经理构建投资组合,平衡收益和风险。
⚝ 风险管理优化 (Risk Management Optimization):建立风险模型,优化风险控制策略,降低金融风险,例如,信用风险管理、市场风险管理、操作风险管理等。例如,银行优化信贷审批流程,降低坏账率。
⚝ 定价模型优化 (Pricing Model Optimization):建立商品或服务的定价模型,优化定价策略,最大化收益或市场份额。例如,航空公司优化机票定价策略,提高客座率和收益。
④ 机器学习与人工智能 (Machine Learning and Artificial Intelligence):优化是机器学习和人工智能算法的核心,用于模型训练、参数优化、特征选择等方面:
⚝ 模型训练 (Model Training):机器学习模型的训练过程本质上是一个优化问题,通过优化算法调整模型参数,使得模型在训练数据上的预测误差最小化。例如,训练神经网络模型,优化网络权重和偏置。
⚝ 特征选择 (Feature Selection):从大量的特征中选择最相关的特征子集,提高模型的泛化能力和计算效率。例如,在图像识别任务中,选择关键的图像特征,提高识别准确率。
⚝ 超参数优化 (Hyperparameter Optimization):机器学习模型通常有很多超参数需要人工设定,通过优化算法自动搜索最优的超参数组合,提高模型性能。例如,优化支持向量机 (Support Vector Machine, SVM) 的核函数参数和惩罚系数。
⑤ 生物医药 (Biomedicine):优化在生物医药领域也有广泛应用,例如药物设计、蛋白质结构预测、医学图像处理、生物信息学等:
⚝ 药物设计 (Drug Design):利用优化算法设计具有特定生物活性的分子结构,加速新药研发过程。例如,通过分子对接和分子动力学模拟,优化药物分子结构。
⚝ 蛋白质结构预测 (Protein Structure Prediction):预测蛋白质的三维结构,理解蛋白质的功能和相互作用。例如,利用优化算法搜索蛋白质能量函数的全局最小值,预测蛋白质结构。
⚝ 医学图像处理 (Medical Image Processing):优化医学图像处理算法,提高图像质量,辅助医生进行疾病诊断和治疗。例如,优化图像重建算法,提高CT和MRI图像的清晰度。
除了以上列举的领域,优化还在能源、环保、交通、通信、材料科学、社会科学等领域有着广泛的应用。随着科学技术的不断发展,优化理论和方法将会在更多的领域发挥重要作用,解决更加复杂和具有挑战性的问题。
1.3 优化问题的分类 (Classification of Optimization Problems)
优化问题可以根据不同的标准进行分类,不同的分类方式有助于我们理解问题的特性,选择合适的优化方法。以下是几种常见的分类方式:
① 根据目标函数和约束函数的类型分类:
⚝ 线性规划 (Linear Programming, LP):目标函数和约束函数都是线性函数的优化问题。线性规划问题具有良好的数学性质,存在高效的求解算法,例如单纯形法 (Simplex Method) 和内点法 (Interior Point Method)。线性规划在运筹学、经济管理等领域有着广泛的应用。
⚝ 非线性规划 (Nonlinear Programming, NLP):目标函数或约束函数中至少有一个是非线性函数的优化问题。非线性规划问题的复杂性远高于线性规划,求解难度也更大。根据非线性函数的具体形式,非线性规划又可以细分为二次规划 (Quadratic Programming, QP)、凸规划 (Convex Programming, CP)、非凸规划 (Non-convex Programming) 等。
▮▮▮▮ⓐ 二次规划 (Quadratic Programming, QP):目标函数是二次函数,约束函数是线性函数的优化问题。二次规划问题在投资组合优化、支持向量机等领域有重要应用。
▮▮▮▮ⓑ 凸规划 (Convex Programming, CP):目标函数是凸函数(最小化问题)或凹函数(最大化问题),可行域是凸集的优化问题。凸规划问题具有良好的性质,局部最优解即为全局最优解,存在高效的求解算法,例如内点法。线性规划和二次规划都是特殊的凸规划。
▮▮▮▮▮▮▮▮❸ 几何规划 (Geometric Programming, GP):一类特殊的非线性规划,目标函数和约束函数都是正项多项式或单项式的形式,可以通过变量变换转化为凸规划问题求解。几何规划在工程设计、电路设计等领域有应用。
▮▮▮▮ⓓ 非凸规划 (Non-convex Programming):目标函数或可行域不是凸集的优化问题。非凸规划问题通常比较难以求解,容易陷入局部最优解,找到全局最优解是一个挑战。许多实际问题,例如神经网络训练、全局优化问题等,都属于非凸规划。
② 根据约束条件的存在与否分类:
⚝ 无约束优化 (Unconstrained Optimization):没有约束条件的优化问题,即决策变量的取值可以在整个定义域内自由选择。无约束优化问题相对简单,求解方法也比较成熟,例如梯度下降法 (Gradient Descent Method)、牛顿法 (Newton's Method)、共轭梯度法 (Conjugate Gradient Method) 等。
⚝ 约束优化 (Constrained Optimization):存在约束条件的优化问题,决策变量的取值需要满足一定的约束条件,可行域是定义域的子集。约束优化问题的求解方法相对复杂,需要考虑约束条件的影响,例如拉格朗日乘子法 (Lagrange Multiplier Method)、序列二次规划法 (Sequential Quadratic Programming, SQP)、内点法等。
③ 根据决策变量的类型分类:
⚝ 连续优化 (Continuous Optimization):决策变量的取值是连续的,可以在实数范围内取值。前面提到的线性规划、非线性规划等都属于连续优化。
⚝ 离散优化 (Discrete Optimization):决策变量的取值是离散的,只能取有限个或可数个值。常见的离散优化问题包括整数规划 (Integer Programming, IP)、组合优化 (Combinatorial Optimization) 等。
▮▮▮▮ⓐ 整数规划 (Integer Programming, IP):决策变量的取值限制为整数的优化问题。整数规划问题通常比连续优化问题更难求解,因为可行域是离散的,无法使用基于导数的优化方法。
▮▮▮▮ⓑ 组合优化 (Combinatorial Optimization):从离散集合中选择最优组合的优化问题。组合优化问题通常涉及到排列、组合、图论等概念,例如旅行商问题 (Traveling Salesperson Problem, TSP)、背包问题 (Knapsack Problem)、图着色问题 (Graph Coloring Problem) 等。
④ 根据优化问题的确定性分类:
⚝ 确定性优化 (Deterministic Optimization):优化问题的所有参数都是确定的,已知且不变的。前面提到的线性规划、非线性规划、整数规划等都属于确定性优化。
⚝ 随机优化 (Stochastic Optimization):优化问题中包含随机因素,例如目标函数或约束函数中包含随机变量,或者参数是随机的。随机优化问题需要考虑随机因素的影响,求解方法也与确定性优化有所不同,例如随机梯度下降法 (Stochastic Gradient Descent, SGD)、模拟退火算法 (Simulated Annealing)、遗传算法 (Genetic Algorithm) 等。
⑤ 根据目标函数的个数分类:
⚝ 单目标优化 (Single-objective Optimization):优化问题只有一个目标函数。前面提到的各种优化问题,如果只考虑一个目标,都属于单目标优化。
⚝ 多目标优化 (Multi-objective Optimization):优化问题有多个目标函数,需要同时优化多个目标。多目标优化问题通常不存在唯一的全局最优解,而是存在Pareto最优解集 (Pareto Optimal Set),需要在多个目标之间进行权衡和折衷。
不同的分类方式从不同的角度刻画了优化问题的特征,有助于我们选择合适的优化方法和算法。在实际应用中,一个优化问题可能同时属于多种分类,例如,一个问题可能是非线性、约束、连续、随机、多目标的优化问题,这时就需要综合考虑问题的特点,选择合适的优化策略。
1.4 优化问题的基本要素 (Basic Elements of Optimization Problems)
任何一个优化问题,无论其具体形式和应用领域如何,都包含一些共同的基本要素。理解这些基本要素是构建优化模型、选择优化方法的基础。优化问题的基本要素主要包括决策变量 (Decision Variables)、目标函数 (Objective Function) 和 约束条件 (Constraints)。
1.4.1 决策变量 (Decision Variables)
决策变量 (Decision Variables),也称为优化变量 (Optimization Variables) 或设计变量 (Design Variables),是指在优化问题中可以自由选择和调整的变量,通过改变决策变量的取值,我们可以影响优化问题的目标函数值和可行性。决策变量是优化问题的“自变量”,是我们需要求解的对象。
在数学上,决策变量通常用向量 \( \mathbf{x} \) 表示,其中 \( \mathbf{x} = [x_1, x_2, \ldots, x_n]^T \),\( x_i \) 表示第 \( i \) 个决策变量,\( n \) 表示决策变量的个数,也称为维度 (dimension)。决策变量的类型可以是连续的(实数)、离散的(整数)、或混合的(既有连续又有离散)。
决策变量的选择 是优化问题建模的关键步骤之一。合理的选择决策变量,能够简洁有效地描述优化问题,方便后续的求解。选择决策变量时,需要考虑以下几个方面:
① 能够充分描述决策方案:决策变量应该能够完整地描述一个可行的决策方案。例如,在生产计划问题中,如果需要决定各种产品的产量,那么每种产品的产量都应该作为一个决策变量。
② 具有可控性:决策变量应该是可以控制和调整的。例如,在控制系统优化中,可以调整的控制器参数是决策变量,而环境噪声等不可控因素则不是决策变量。
③ 数量尽可能少:在满足问题描述需求的前提下,决策变量的数量应该尽可能少,以降低优化问题的维度,提高求解效率。过多的决策变量会增加问题的复杂性,甚至导致“维度灾难 (curse of dimensionality)”。
示例:
⚝ 例1:生产计划问题
某工厂生产两种产品 A 和 B,生产产品 A 需要 2 个工时和 3 公斤原材料,生产产品 B 需要 3 个工时和 2 公斤原材料。工厂每天可用的工时为 12 个小时,原材料为 18 公斤。产品 A 的利润为每件 4 元,产品 B 的利润为每件 5 元。问工厂每天应该生产多少件产品 A 和产品 B,才能使总利润最大?
在这个问题中,决策变量 可以选择为:
\( x_1 \): 产品 A 的日产量 (件)
\( x_2 \): 产品 B 的日产量 (件)
决策变量 \( x_1 \) 和 \( x_2 \) 都是非负实数,并且需要满足工时和原材料的约束。
⚝ 例2:旅行商问题 (TSP)
给定 \( n \) 个城市和城市之间的距离,旅行商需要访问每个城市一次且仅一次,最后回到出发城市,如何规划旅行路线,使得总旅行距离最短?
在这个问题中,决策变量 可以选择为:
\( x_{ij} \): 如果路径中城市 \( i \) 之后访问城市 \( j \),则 \( x_{ij} = 1 \),否则 \( x_{ij} = 0 \)。其中 \( i, j = 1, 2, \ldots, n \)。
决策变量 \( x_{ij} \) 是 0-1 整数变量,表示城市之间是否连接。需要满足每个城市被访问一次且仅一次的约束,以及构成一个完整回路的约束。
1.4.2 目标函数 (Objective Function)
目标函数 (Objective Function),也称为评价函数 (Evaluation Function) 或成本函数 (Cost Function),是优化问题中需要最大化或最小化的函数,它将决策变量的取值映射为一个标量值,用于评价 решения (solutions) 的优劣程度。目标函数是优化问题的“目标”,是我们需要达到的指标。
在数学上,目标函数通常用 \( f(\mathbf{x}) \) 表示,其中 \( \mathbf{x} \) 是决策变量向量。根据优化目标的不同,优化问题可以分为最小化问题 (Minimization Problem) 和 最大化问题 (Maximization Problem)。
⚝ 最小化问题 (Minimization Problem):目标是寻找使得目标函数 \( f(\mathbf{x}) \) 取得最小值的决策变量 \( \mathbf{x} \)。例如,最小化成本、最小化误差、最小化能量等。
⚝ 最大化问题 (Maximization Problem):目标是寻找使得目标函数 \( f(\mathbf{x}) \) 取得最大值的决策变量 \( \mathbf{x} \)。例如,最大化利润、最大化收益、最大化效率等。
任何最大化问题都可以转化为最小化问题,反之亦然。例如,最大化 \( f(\mathbf{x}) \) 等价于最小化 \( -f(\mathbf{x}) \)。因此,在优化理论中,通常只讨论最小化问题,最大化问题可以通过简单的转换转化为最小化问题求解。
目标函数的选择 是优化问题建模的另一个关键步骤。目标函数应该能够准确地反映优化问题的目标,并且具有可计算性。选择目标函数时,需要考虑以下几个方面:
① 能够准确反映优化目标:目标函数应该能够量化地表示优化问题的目标,例如,如果目标是降低成本,那么目标函数应该是成本函数;如果目标是提高性能,那么目标函数应该是性能指标函数。
② 具有可计算性:目标函数应该是可以计算的,即对于给定的决策变量取值,可以计算出目标函数值。目标函数的计算复杂度会影响优化算法的效率。
③ 光滑性 (Smoothness):目标函数的光滑性(例如,可导性、连续性)会影响优化算法的选择和收敛速度。对于光滑的目标函数,可以使用基于梯度的方法进行优化;对于非光滑的目标函数,需要使用无梯度优化方法。
示例 (续例1和例2):
⚝ 例1:生产计划问题 (续)
在这个问题中,目标 是最大化总利润。根据产品 A 和产品 B 的利润,目标函数 可以表示为:
\[ \max f(x_1, x_2) = 4x_1 + 5x_2 \]
目标函数 \( f(x_1, x_2) \) 是关于决策变量 \( x_1 \) 和 \( x_2 \) 的线性函数,表示总利润。我们需要找到合适的 \( x_1 \) 和 \( x_2 \) 取值,使得 \( f(x_1, x_2) \) 最大。
⚝ 例2:旅行商问题 (TSP) (续)
在这个问题中,目标 是最小化总旅行距离。假设城市 \( i \) 和城市 \( j \) 之间的距离为 \( d_{ij} \),目标函数 可以表示为:
\[ \min f(\mathbf{x}) = \sum_{i=1}^{n} \sum_{j=1}^{n} d_{ij} x_{ij} \]
目标函数 \( f(\mathbf{x}) \) 是关于决策变量 \( x_{ij} \) 的线性函数,表示总旅行距离。我们需要找到合适的 \( x_{ij} \) 取值,使得 \( f(\mathbf{x}) \) 最小。
1.4.3 约束条件 (Constraints)
约束条件 (Constraints) 是优化问题中对决策变量取值的限制,它限定了决策变量的可行范围,确保 решения (solutions) 的合理性和可行性。约束条件定义了可行域 (Feasible Region) 或 可行集 (Feasible Set),只有满足所有约束条件的决策变量取值才是可行解 (Feasible Solution)。
约束条件通常用等式或不等式表示。
⚝ 等式约束 (Equality Constraints):限制决策变量之间必须满足的等式关系,形式为 \( h_i(\mathbf{x}) = 0 \),其中 \( i = 1, 2, \ldots, m_e \),\( m_e \) 是等式约束的个数,\( h_i(\mathbf{x}) \) 是约束函数。等式约束将可行域限制在一个曲面或曲线上。
⚝ 不等式约束 (Inequality Constraints):限制决策变量之间必须满足的不等式关系,形式为 \( g_j(\mathbf{x}) \leq 0 \) 或 \( g_j(\mathbf{x}) \geq 0 \),其中 \( j = 1, 2, \ldots, m_i \),\( m_i \) 是不等式约束的个数,\( g_j(\mathbf{x}) \) 是约束函数。不等式约束将可行域限制在一个区域内。
除了等式约束和不等式约束,还有一些特殊的约束条件,例如变量边界约束 (Variable Bounds),限制决策变量的取值范围,形式为 \( l_k \leq x_k \leq u_k \),其中 \( l_k \) 和 \( u_k \) 分别是决策变量 \( x_k \) 的下界和上界。
约束条件的选择和建模 也非常重要。约束条件应该能够准确地描述优化问题的限制条件,并且具有数学上的可处理性。选择约束条件时,需要考虑以下几个方面:
① 能够准确反映实际约束:约束条件应该能够准确地描述实际问题中的各种限制,例如资源限制、物理限制、技术限制、法律法规限制等。
② 可行域非空:约束条件应该保证可行域非空,即至少存在一个可行解。如果可行域为空,则优化问题无解。
③ 约束形式尽量简单:在满足问题描述需求的前提下,约束条件的形式应该尽量简单,例如线性约束比非线性约束更容易处理,凸约束比非凸约束更容易求解。
示例 (续例1和例2):
⚝ 例1:生产计划问题 (续)
在这个问题中,存在工时约束和原材料约束,以及产量非负约束。约束条件 可以表示为:
工时约束:\( 2x_1 + 3x_2 \leq 12 \)
原材料约束:\( 3x_1 + 2x_2 \leq 18 \)
产量非负约束:\( x_1 \geq 0, x_2 \geq 0 \)
这些约束条件限定了决策变量 \( x_1 \) 和 \( x_2 \) 的可行取值范围。
⚝ 例2:旅行商问题 (TSP) (续)
在这个问题中,需要保证每个城市被访问一次且仅一次,以及构成一个完整回路。约束条件 可以表示为:
每个城市被访问一次:\( \sum_{j=1}^{n} x_{ij} = 1, \forall i = 1, 2, \ldots, n \)
每个城市被访问一次:\( \sum_{i=1}^{n} x_{ij} = 1, \forall j = 1, 2, \ldots, n \)
消除子回路约束(为了保证构成一个完整回路,而不是多个不相连的子回路,子回路消除约束的数学表达比较复杂,这里省略具体形式,在后续章节会详细介绍)。
\( x_{ij} \in \{0, 1\}, \forall i, j = 1, 2, \ldots, n \)
这些约束条件保证了 решения (solutions) 的有效性,即旅行商访问每个城市一次且仅一次,并构成一个完整的旅行回路。
总而言之,决策变量、目标函数 和 约束条件 是优化问题的三大基本要素。理解和掌握这三个要素,是学习和应用优化理论的基础。在实际应用中,我们需要根据具体问题,合理地选择决策变量,构建目标函数和约束条件,建立完善的优化模型,才能有效地解决问题。
2. chapter 2: 数学基础 (Mathematical Foundations)
2.1 线性代数基础 (Basics of Linear Algebra)
2.1.1 向量与矩阵 (Vectors and Matrices)
在线性代数 (Linear Algebra) 中,向量 (Vector) 和 矩阵 (Matrix) 是最基本且核心的概念,它们不仅是构建优化理论的基石,也是理解和解决优化问题的关键工具。本节将回顾向量和矩阵的基本定义、运算及其在优化中的意义。
① 向量 (Vector):
向量是一个有序的数列,可以表示成行向量或列向量。在几何上,向量可以表示空间中的一个点或一个有方向和长度的线段。在优化领域,向量通常用来表示 决策变量 (Decision Variables) 的集合,例如,一个投资组合中不同资产的权重,或者机器学习模型中的参数。
⚝ 定义 (Definition):一个 \(n\) 维列向量 \( \mathbf{x} \) 表示为:
\[ \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \]
其中,\(x_i\) 是向量的第 \(i\) 个分量,可以是实数或复数。类似地,行向量是列向量的转置。
⚝ 向量运算 (Vector Operations):
▮▮▮▮⚝ 加法 (Addition):两个相同维度的向量 \( \mathbf{x} \) 和 \( \mathbf{y} \) 的加法定义为对应分量相加:
\[ \mathbf{x} + \mathbf{y} = \begin{bmatrix} x_1 + y_1 \\ x_2 + y_2 \\ \vdots \\ x_n + y_n \end{bmatrix} \]
▮▮▮▮⚝ 标量乘法 (Scalar Multiplication):标量 \( \alpha \) 与向量 \( \mathbf{x} \) 的乘法定义为每个分量乘以标量:
\[ \alpha \mathbf{x} = \begin{bmatrix} \alpha x_1 \\ \alpha x_2 \\ \vdots \\ \alpha x_n \end{bmatrix} \]
▮▮▮▮⚝ 内积 (Inner Product) / 点积 (Dot Product):两个相同维度向量 \( \mathbf{x} \) 和 \( \mathbf{y} \) 的内积定义为对应分量乘积之和:
\[ \mathbf{x}^T \mathbf{y} = \sum_{i=1}^{n} x_i y_i = x_1y_1 + x_2y_2 + \dots + x_ny_n \]
内积的结果是一个标量。内积在优化中常用于计算 目标函数 (Objective Function) 的梯度,以及衡量向量之间的关系,如正交性。
▮▮▮▮⚝ 范数 (Norm):向量的范数是衡量向量“长度”的概念。常用的范数包括:
▮▮▮▮▮▮▮▮⚝ \(L_2\) 范数 (Euclidean Norm):\( \| \mathbf{x} \|_2 = \sqrt{\sum_{i=1}^{n} x_i^2} = \sqrt{\mathbf{x}^T \mathbf{x}} \)
▮▮▮▮▮▮▮▮⚝ \(L_1\) 范数 (Manhattan Norm):\( \| \mathbf{x} \|_1 = \sum_{i=1}^{n} |x_i| \)
▮▮▮▮▮▮▮▮⚝ \(L_\infty\) 范数 (Maximum Norm):\( \| \mathbf{x} \|_\infty = \max_{1 \le i \le n} |x_i| \)
范数在优化中用于定义 距离 (Distance) 和 收敛性 (Convergence),例如,在梯度下降法中,我们通过迭代更新决策变量,并监控梯度范数是否趋近于零来判断算法是否收敛。
② 矩阵 (Matrix):
矩阵是一个矩形排列的数表,由行和列组成。矩阵可以表示线性变换、方程组的系数等。在优化中,矩阵常用于表示 约束条件 (Constraints) 的系数矩阵、目标函数 (Objective Function) 的二阶导数(海森矩阵),以及算法中的变换矩阵。
⚝ 定义 (Definition):一个 \(m \times n\) 矩阵 \( \mathbf{A} \) 表示为:
\[ \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{bmatrix} \]
其中,\(a_{ij}\) 是矩阵 \( \mathbf{A} \) 的第 \(i\) 行第 \(j\) 列的元素。
⚝ 矩阵运算 (Matrix Operations):
▮▮▮▮⚝ 加法 (Addition):两个相同维度 \(m \times n\) 的矩阵 \( \mathbf{A} \) 和 \( \mathbf{B} \) 的加法定义为对应元素相加:
\[ (\mathbf{A} + \mathbf{B})_{ij} = a_{ij} + b_{ij} \]
▮▮▮▮⚝ 标量乘法 (Scalar Multiplication):标量 \( \alpha \) 与矩阵 \( \mathbf{A} \) 的乘法定义为每个元素乘以标量:
\[ (\alpha \mathbf{A})_{ij} = \alpha a_{ij} \]
▮▮▮▮⚝ 矩阵乘法 (Matrix Multiplication):若矩阵 \( \mathbf{A} \) 的维度为 \(m \times p\),矩阵 \( \mathbf{B} \) 的维度为 \(p \times n\),则矩阵 \( \mathbf{A} \) 和 \( \mathbf{B} \) 的乘积 \( \mathbf{C} = \mathbf{A} \mathbf{B} \) 是一个 \(m \times n\) 矩阵,其元素定义为:
\[ c_{ij} = \sum_{k=1}^{p} a_{ik} b_{kj} \]
矩阵乘法在优化中用于表示线性变换、构建约束方程组等。
▮▮▮▮⚝ 转置 (Transpose):矩阵 \( \mathbf{A} \) 的转置 \( \mathbf{A}^T \) 是将 \( \mathbf{A} \) 的行变成列,列变成行得到的矩阵。若 \( \mathbf{A} \) 是 \(m \times n\) 矩阵,则 \( \mathbf{A}^T \) 是 \(n \times m\) 矩阵,且 \( (\mathbf{A}^T)_{ij} = a_{ji} \)。
▮▮▮▮⚝ 逆矩阵 (Inverse Matrix):对于一个 \(n \times n\) 方阵 \( \mathbf{A} \),如果存在一个 \(n \times n\) 矩阵 \( \mathbf{A}^{-1} \),使得 \( \mathbf{A} \mathbf{A}^{-1} = \mathbf{A}^{-1} \mathbf{A} = \mathbf{I} \),其中 \( \mathbf{I} \) 是 \(n \times n\) 单位矩阵,则称 \( \mathbf{A}^{-1} \) 为 \( \mathbf{A} \) 的逆矩阵。逆矩阵在解线性方程组和牛顿法等优化算法中起着重要作用。并非所有方阵都存在逆矩阵,只有 非奇异矩阵 (Non-singular Matrix) 或 可逆矩阵 (Invertible Matrix) 才存在逆矩阵。
▮▮▮▮⚝ 行列式 (Determinant):行列式是对方阵定义的一个标量值,记作 \( \det(\mathbf{A}) \) 或 \( |\mathbf{A}| \)。行列式可以用来判断矩阵是否可逆(行列式非零时可逆),以及计算特征值等。
▮▮▮▮⚝ 迹 (Trace):方阵 \( \mathbf{A} \) 的迹 \( \text{tr}(\mathbf{A}) \) 是对角线上元素的和:
\[ \text{tr}(\mathbf{A}) = \sum_{i=1}^{n} a_{ii} \]
迹在某些优化问题的分析中很有用。
理解向量和矩阵及其运算是深入学习优化理论的基础。在后续章节中,我们将看到如何运用这些线性代数工具来描述和求解各种优化问题。
2.1.2 线性空间与子空间 (Linear Spaces and Subspaces)
线性空间 (Linear Space),也称为 向量空间 (Vector Space),是线性代数的核心概念之一,它为我们提供了一个抽象的框架来研究向量及其线性组合。子空间 (Subspace) 是线性空间内部满足特定条件的子集,它继承了线性空间的结构,并在优化理论中扮演重要角色,尤其是在约束优化问题中。
① 线性空间 (Linear Space) / 向量空间 (Vector Space):
⚝ 定义 (Definition):一个线性空间 \(V\) 是一个集合,其中定义了 向量加法 (Vector Addition) 和 标量乘法 (Scalar Multiplication) 两种运算,并且满足以下八条公理:
对于任意向量 \( \mathbf{u}, \mathbf{v}, \mathbf{w} \in V \) 和标量 \( \alpha, \beta \in \mathbb{R} \) (或复数域 \( \mathbb{C} \)):
- 加法交换律 (Commutativity of Addition):\( \mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u} \)
- 加法结合律 (Associativity of Addition):\( (\mathbf{u} + \mathbf{v}) + \mathbf{w} = \mathbf{u} + (\mathbf{v} + \mathbf{w}) \)
- 零向量 (Zero Vector):存在零向量 \( \mathbf{0} \in V \),使得对于任意 \( \mathbf{u} \in V \),\( \mathbf{u} + \mathbf{0} = \mathbf{u} \)
- 加法逆元 (Additive Inverse):对于任意 \( \mathbf{u} \in V \),存在 \( -\mathbf{u} \in V \),使得 \( \mathbf{u} + (-\mathbf{u}) = \mathbf{0} \)
- 标量乘法结合律 (Associativity of Scalar Multiplication):\( \alpha (\beta \mathbf{u}) = (\alpha \beta) \mathbf{u} \)
- 标量乘法分配律 (Distributivity of Scalar Multiplication over Vector Addition):\( \alpha (\mathbf{u} + \mathbf{v}) = \alpha \mathbf{u} + \alpha \mathbf{v} \)
- 标量乘法分配律 (Distributivity of Scalar Multiplication over Scalar Addition):\( (\alpha + \beta) \mathbf{u} = \alpha \mathbf{u} + \beta \mathbf{u} \)
- 单位元 (Multiplicative Identity):\( 1 \mathbf{u} = \mathbf{u} \),其中 \( 1 \) 是标量乘法的单位元。
⚝ 常见线性空间示例 (Examples of Linear Spaces):
▮▮▮▮⚝ \(n\) 维实向量空间 \( \mathbb{R}^n \):所有 \(n\) 维实向量的集合,向量加法和标量乘法按分量定义。这是优化理论中最常用的线性空间。
▮▮▮▮⚝ \(m \times n\) 矩阵空间 \( \mathbb{R}^{m \times n} \):所有 \(m \times n\) 实矩阵的集合,矩阵加法和标量乘法按元素定义。
▮▮▮▮⚝ 函数空间 (Function Space):例如,所有实数上的连续函数构成的集合 \( C(\mathbb{R}) \),函数加法和标量乘法按点定义。
② 子空间 (Subspace):
⚝ 定义 (Definition):设 \(V\) 是一个线性空间,\(U\) 是 \(V\) 的一个非空子集。如果 \(U\) 本身也构成一个线性空间(在 \(V\) 中定义的加法和标量乘法运算下),则称 \(U\) 是 \(V\) 的一个子空间。
⚝ 子空间的判定定理 (Subspace Criterion):要判断 \(U\) 是否为线性空间 \(V\) 的子空间,只需验证以下三个条件:
1. 非空性 (Non-empty):\(U\) 必须是非空集合,通常验证零向量 \( \mathbf{0} \in U \)。
2. 加法封闭性 (Closure under Addition):对于任意 \( \mathbf{u}, \mathbf{v} \in U \),必须有 \( \mathbf{u} + \mathbf{v} \in U \)。
3. 标量乘法封闭性 (Closure under Scalar Multiplication):对于任意 \( \mathbf{u} \in U \) 和标量 \( \alpha \),必须有 \( \alpha \mathbf{u} \in U \)。
⚝ 常见子空间示例 (Examples of Subspaces):
▮▮▮▮⚝ 零空间 (Zero Subspace):\( \{ \mathbf{0} \} \) 是任何线性空间 \(V\) 的子空间。
▮▮▮▮⚝ 全空间 (Full Space):线性空间 \(V\) 本身是自己的子空间。
▮▮▮▮⚝ 矩阵的列空间 (Column Space):对于 \(m \times n\) 矩阵 \( \mathbf{A} \),其列空间 \( \text{Col}(\mathbf{A}) \) 是由 \( \mathbf{A} \) 的列向量张成的 \( \mathbb{R}^m \) 的子空间。列空间也称为 像空间 (Image Space) 或 值域 (Range)。
▮▮▮▮⚝ 矩阵的零空间 (Null Space):对于 \(m \times n\) 矩阵 \( \mathbf{A} \),其零空间 \( \text{Null}(\mathbf{A}) \) 是方程 \( \mathbf{A} \mathbf{x} = \mathbf{0} \) 的所有解 \( \mathbf{x} \in \mathbb{R}^n \) 构成的 \( \mathbb{R}^n \) 的子空间。零空间也称为 核 (Kernel)。
⚝ 线性组合与张成空间 (Linear Combination and Span):
给定向量集合 \( \{ \mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \} \subseteq V \),它们的 线性组合 (Linear Combination) 是指形如 \( \alpha_1 \mathbf{v}_1 + \alpha_2 \mathbf{v}_2 + \dots + \alpha_k \mathbf{v}_k \) 的向量,其中 \( \alpha_1, \alpha_2, \dots, \alpha_k \) 是标量。
向量集合 \( \{ \mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \} \) 的 张成空间 (Span),记作 \( \text{span}\{ \mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \} \),是指由这些向量的所有线性组合构成的集合。张成空间是包含 \( \{ \mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \} \) 的最小子空间。
⚝ 基与维数 (Basis and Dimension):
线性空间 \(V\) 的 基 (Basis) 是 \(V\) 中线性无关的向量集合,且这些向量能够张成整个空间 \(V\)。一个线性空间的基不是唯一的,但所有基包含的向量个数相同,这个个数称为线性空间 \(V\) 的 维数 (Dimension),记作 \( \dim(V) \)。例如,\( \mathbb{R}^n \) 的标准基是 \( \{ \mathbf{e}_1, \mathbf{e}_2, \dots, \mathbf{e}_n \} \),其中 \( \mathbf{e}_i \) 是第 \(i\) 个分量为 1,其余分量为 0 的向量,\( \dim(\mathbb{R}^n) = n \)。
线性空间和子空间的概念为我们提供了描述和分析优化问题的数学语言。例如,约束条件常常定义了解空间为某个线性空间的子集,而优化算法的迭代过程也常常在某个线性空间或子空间中进行。
2.1.3 特征值与特征向量 (Eigenvalues and Eigenvectors)
特征值 (Eigenvalue) 和 特征向量 (Eigenvector) 是线性代数中描述线性变换本质的重要概念。它们在优化理论中,特别是在分析矩阵的性质、优化算法的收敛性以及二次型优化问题中,都有着广泛的应用。
① 定义 (Definition):
对于 \(n \times n\) 的方阵 \( \mathbf{A} \),如果存在非零向量 \( \mathbf{v} \in \mathbb{R}^n \) 和标量 \( \lambda \in \mathbb{R} \) (或复数域 \( \mathbb{C} \)),使得:
\[ \mathbf{A} \mathbf{v} = \lambda \mathbf{v} \]
则称 \( \lambda \) 是矩阵 \( \mathbf{A} \) 的一个 特征值 (Eigenvalue),\( \mathbf{v} \) 是对应于特征值 \( \lambda \) 的一个 特征向量 (Eigenvector)。
几何意义上,特征向量 \( \mathbf{v} \) 经过矩阵 \( \mathbf{A} \) 代表的线性变换后,方向保持不变或反向,只是长度缩放了 \( \lambda \) 倍。
② 特征方程 (Characteristic Equation):
为了求解矩阵 \( \mathbf{A} \) 的特征值,可以将特征值方程 \( \mathbf{A} \mathbf{v} = \lambda \mathbf{v} \) 变形为:
\[ (\mathbf{A} - \lambda \mathbf{I}) \mathbf{v} = \mathbf{0} \]
其中 \( \mathbf{I} \) 是 \(n \times n\) 单位矩阵。要使上式存在非零解 \( \mathbf{v} \),矩阵 \( (\mathbf{A} - \lambda \mathbf{I}) \) 必须是奇异的,即其行列式为零:
\[ \det(\mathbf{A} - \lambda \mathbf{I}) = 0 \]
这个方程称为矩阵 \( \mathbf{A} \) 的 特征方程 (Characteristic Equation)。展开行列式 \( \det(\mathbf{A} - \lambda \mathbf{I}) \) 会得到一个关于 \( \lambda \) 的 \(n\) 次多项式方程,称为 特征多项式 (Characteristic Polynomial)。特征值 \( \lambda \) 就是特征方程的根。
③ 特征值的性质 (Properties of Eigenvalues):
⚝ 对于 \(n \times n\) 矩阵 \( \mathbf{A} \),它有 \(n\) 个特征值(可能重复,也可能是复数)。
⚝ 实对称矩阵 (Real Symmetric Matrix) 的特征值都是实数。
⚝ 矩阵 \( \mathbf{A} \) 的所有特征值之和等于矩阵的迹 \( \text{tr}(\mathbf{A}) \)。
⚝ 矩阵 \( \mathbf{A} \) 的所有特征值之积等于矩阵的行列式 \( \det(\mathbf{A}) \)。
⚝ 如果 \( \lambda \) 是矩阵 \( \mathbf{A} \) 的特征值,则 \( \lambda^k \) 是 \( \mathbf{A}^k \) 的特征值。
⚝ 如果 \( \mathbf{A} \) 可逆,且 \( \lambda \) 是 \( \mathbf{A} \) 的非零特征值,则 \( 1/\lambda \) 是 \( \mathbf{A}^{-1} \) 的特征值。
④ 特征向量的性质 (Properties of Eigenvectors):
⚝ 对于每个特征值 \( \lambda \),都存在至少一个非零特征向量。
⚝ 对应于不同特征值的特征向量是线性无关的。
⚝ 对应于同一个特征值的所有特征向量加上零向量构成一个子空间,称为 特征子空间 (Eigenspace)。
⑤ 应用 (Applications):
⚝ 矩阵的对角化 (Diagonalization):如果矩阵 \( \mathbf{A} \) 有 \(n\) 个线性无关的特征向量,则 \( \mathbf{A} \) 可以对角化,即存在可逆矩阵 \( \mathbf{P} \) 和对角矩阵 \( \mathbf{\Lambda} \),使得 \( \mathbf{A} = \mathbf{P} \mathbf{\Lambda} \mathbf{P}^{-1} \),其中 \( \mathbf{\Lambda} \) 的对角元素是 \( \mathbf{A} \) 的特征值,\( \mathbf{P} \) 的列向量是对应的特征向量。对角化在简化矩阵运算、分析系统稳定性等方面非常有用。
⚝ 二次型 (Quadratic Form):对于实对称矩阵 \( \mathbf{A} \),二次型 \( f(\mathbf{x}) = \mathbf{x}^T \mathbf{A} \mathbf{x} \) 的性质与 \( \mathbf{A} \) 的特征值密切相关。例如,二次型是正定的 (Positive Definite) 当且仅当 \( \mathbf{A} \) 的所有特征值都为正;是半正定的 (Positive Semidefinite) 当且仅当 \( \mathbf{A} \) 的所有特征值都非负。二次型在优化问题中经常出现,例如在牛顿法中,海森矩阵的正定性直接影响算法的收敛性。
⚝ 优化算法的收敛性分析 (Convergence Analysis of Optimization Algorithms):在分析梯度下降法、牛顿法等优化算法的收敛速度时,常常需要用到海森矩阵的特征值。例如,梯度下降法的收敛速度与海森矩阵的最大和最小特征值之比(条件数)有关。
⚝ 主成分分析 (Principal Component Analysis, PCA):在机器学习和数据分析中,PCA 是一种常用的降维技术,它通过计算数据协方差矩阵的特征值和特征向量,找到数据的主要成分,从而实现降维和特征提取。
理解特征值和特征向量有助于我们深入理解矩阵的性质,并在优化理论和应用中灵活运用线性代数工具。
2.2 微积分基础 (Basics of Calculus)
微积分 (Calculus) 是优化理论的另一块重要的数学基石。优化问题本质上是寻找函数的最大值或最小值,而微积分提供了分析函数性质、求解极值问题的有力工具。本节将回顾微积分中的基本概念,包括导数、梯度、泰勒展开以及凸函数与凹函数。
2.2.1 导数与梯度 (Derivatives and Gradients)
导数 (Derivative) 和 梯度 (Gradient) 是微积分中描述函数变化率的核心概念。导数用于描述单变量函数的变化率,而梯度是导数概念在多变量函数上的推广,描述了函数在某点处变化最快的方向和速率。
① 导数 (Derivative):
⚝ 定义 (Definition):对于单变量函数 \( f: \mathbb{R} \to \mathbb{R} \),在点 \( x_0 \) 处的导数 \( f'(x_0) \) 定义为极限:
\[ f'(x_0) = \lim_{h \to 0} \frac{f(x_0 + h) - f(x_0)}{h} \]
如果这个极限存在,则称函数 \( f \) 在 \( x_0 \) 处可导。导数 \( f'(x_0) \) 表示函数 \( f \) 在点 \( x_0 \) 处的变化率,几何上是函数曲线在点 \( (x_0, f(x_0)) \) 处的切线斜率。
⚝ 常用导数公式 (Common Derivative Formulas):
▮▮▮▮⚝ 幂函数 (Power Function):\( \frac{d}{dx} x^n = n x^{n-1} \)
▮▮▮▮⚝ 指数函数 (Exponential Function):\( \frac{d}{dx} e^x = e^x \),\( \frac{d}{dx} a^x = a^x \ln a \)
▮▮▮▮⚝ 对数函数 (Logarithmic Function):\( \frac{d}{dx} \ln x = \frac{1}{x} \),\( \frac{d}{dx} \log_a x = \frac{1}{x \ln a} \)
▮▮▮▮⚝ 三角函数 (Trigonometric Functions):\( \frac{d}{dx} \sin x = \cos x \),\( \frac{d}{dx} \cos x = -\sin x \)
⚝ 求导法则 (Differentiation Rules):
▮▮▮▮⚝ 常数法则 (Constant Rule):\( \frac{d}{dx} c = 0 \) (\(c\) 为常数)
▮▮▮▮⚝ 线性法则 (Linearity Rule):\( \frac{d}{dx} [\alpha f(x) + \beta g(x)] = \alpha f'(x) + \beta g'(x) \) (\( \alpha, \beta \) 为常数)
▮▮▮▮⚝ 乘法法则 (Product Rule):\( \frac{d}{dx} [f(x) g(x)] = f'(x) g(x) + f(x) g'(x) \)
▮▮▮▮⚝ 除法法则 (Quotient Rule):\( \frac{d}{dx} \left[ \frac{f(x)}{g(x)} \right] = \frac{f'(x) g(x) - f(x) g'(x)}{[g(x)]^2} \)
▮▮▮▮⚝ 链式法则 (Chain Rule):\( \frac{d}{dx} [f(g(x))] = f'(g(x)) g'(x) \)
② 梯度 (Gradient):
⚝ 定义 (Definition):对于多变量函数 \( f: \mathbb{R}^n \to \mathbb{R} \),在点 \( \mathbf{x}_0 = (x_{1,0}, x_{2,0}, \dots, x_{n,0})^T \) 处的梯度 \( \nabla f(\mathbf{x}_0) \) 定义为一个向量,其每个分量是函数 \( f \) 对各个变量的偏导数 (Partial Derivative):
\[ \nabla f(\mathbf{x}_0) = \begin{bmatrix} \frac{\partial f}{\partial x_1}(\mathbf{x}_0) \\ \frac{\partial f}{\partial x_2}(\mathbf{x}_0) \\ \vdots \\ \frac{\partial f}{\partial x_n}(\mathbf{x}_0) \end{bmatrix} \]
其中,偏导数 \( \frac{\partial f}{\partial x_i}(\mathbf{x}_0) \) 是指固定其他变量不变,只对 \( x_i \) 求导数。梯度 \( \nabla f(\mathbf{x}_0) \) 指向函数 \( f \) 在点 \( \mathbf{x}_0 \) 处增长最快的方向,其模长 \( \| \nabla f(\mathbf{x}_0) \| \) 表示在该方向上的最大变化率。
⚝ 梯度在优化中的意义 (Significance of Gradient in Optimization):
在优化问题中,我们常常需要寻找函数的最小值点。对于可微函数,最小值点通常出现在梯度为零的点(驻点或临界点)。梯度下降法 (Gradient Descent Method) 是一种常用的迭代优化算法,其基本思想是沿着负梯度方向迭代更新决策变量,以逐步逼近函数的最小值点。负梯度方向是函数值下降最快的方向。
⚝ 雅可比矩阵 (Jacobian Matrix) 与海森矩阵 (Hessian Matrix):
▮▮▮▮⚝ 雅可比矩阵 (Jacobian Matrix):对于向量值函数 \( \mathbf{f}: \mathbb{R}^n \to \mathbb{R}^m \),\( \mathbf{f}(\mathbf{x}) = [f_1(\mathbf{x}), f_2(\mathbf{x}), \dots, f_m(\mathbf{x})]^T \),其雅可比矩阵 \( \mathbf{J}_{\mathbf{f}}(\mathbf{x}) \) 是一个 \(m \times n\) 矩阵,定义为:
\[ \mathbf{J}_{\mathbf{f}}(\mathbf{x}) = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \dots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \dots & \frac{\partial f_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \frac{\partial f_m}{\partial x_2} & \dots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} \]
当 \( m = 1 \) 时,雅可比矩阵退化为梯度向量的转置 \( \mathbf{J}_f(\mathbf{x}) = [\nabla f(\mathbf{x})]^T \)。
▮▮▮▮⚝ 海森矩阵 (Hessian Matrix):对于二阶可微的标量函数 \( f: \mathbb{R}^n \to \mathbb{R} \),其海森矩阵 \( \mathbf{H}_f(\mathbf{x}) \) 或 \( \nabla^2 f(\mathbf{x}) \) 是一个 \(n \times n\) 对称矩阵,定义为:
\[ \mathbf{H}_f(\mathbf{x}) = \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \dots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \dots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \dots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix} \]
海森矩阵描述了函数曲率 (Curvature) 的信息,在牛顿法等二阶优化算法中起着关键作用。海森矩阵的正定性与函数的局部凸性有关。
2.2.2 泰勒展开 (Taylor Expansion)
泰勒展开 (Taylor Expansion) 是微积分中一种重要的近似方法,它用多项式函数逼近复杂函数在某点附近的行为。泰勒展开在优化理论中用于近似目标函数、分析算法的局部性质以及推导优化算法。
① 单变量函数的泰勒展开 (Taylor Expansion for Single-Variable Functions):
⚝ 泰勒公式 (Taylor's Formula):设函数 \( f: \mathbb{R} \to \mathbb{R} \) 在点 \( x_0 \) 处 \(n\) 阶可导,则 \( f(x) \) 在 \( x_0 \) 附近的 \(n\) 阶泰勒展开式为:
\[ f(x) = f(x_0) + f'(x_0)(x - x_0) + \frac{f''(x_0)}{2!}(x - x_0)^2 + \dots + \frac{f^{(n)}(x_0)}{n!}(x - x_0)^n + R_n(x) \]
其中,\( f^{(k)}(x_0) \) 表示函数 \( f \) 在 \( x_0 \) 处的 \(k\) 阶导数,\( R_n(x) \) 是 拉格朗日余项 (Lagrange Remainder) 或其他形式的余项,表示截断误差。
⚝ 一阶泰勒展开 (First-Order Taylor Expansion):
\[ f(x) \approx f(x_0) + f'(x_0)(x - x_0) \]
一阶泰勒展开用线性函数近似 \( f(x) \) 在 \( x_0 \) 附近的行为。
⚝ 二阶泰勒展开 (Second-Order Taylor Expansion):
\[ f(x) \approx f(x_0) + f'(x_0)(x - x_0) + \frac{f''(x_0)}{2!}(x - x_0)^2 \]
二阶泰勒展开用二次函数近似 \( f(x) \) 在 \( x_0 \) 附近的行为,更精确地捕捉了函数的曲率信息。
② 多变量函数的泰勒展开 (Taylor Expansion for Multi-Variable Functions):
⚝ 一阶泰勒展开 (First-Order Taylor Expansion):设函数 \( f: \mathbb{R}^n \to \mathbb{R} \) 在点 \( \mathbf{x}_0 \) 处一阶可微,则 \( f(\mathbf{x}) \) 在 \( \mathbf{x}_0 \) 附近的一阶泰勒展开式为:
\[ f(\mathbf{x}) \approx f(\mathbf{x}_0) + \nabla f(\mathbf{x}_0)^T (\mathbf{x} - \mathbf{x}_0) \]
其中,\( \nabla f(\mathbf{x}_0) \) 是函数 \( f \) 在 \( \mathbf{x}_0 \) 处的梯度。
⚝ 二阶泰勒展开 (Second-Order Taylor Expansion):设函数 \( f: \mathbb{R}^n \to \mathbb{R} \) 在点 \( \mathbf{x}_0 \) 处二阶可微,则 \( f(\mathbf{x}) \) 在 \( \mathbf{x}_0 \) 附近的二阶泰勒展开式为:
\[ f(\mathbf{x}) \approx f(\mathbf{x}_0) + \nabla f(\mathbf{x}_0)^T (\mathbf{x} - \mathbf{x}_0) + \frac{1}{2} (\mathbf{x} - \mathbf{x}_0)^T \mathbf{H}_f(\mathbf{x}_0) (\mathbf{x} - \mathbf{x}_0) \]
其中,\( \mathbf{H}_f(\mathbf{x}_0) \) 是函数 \( f \) 在 \( \mathbf{x}_0 \) 处的海森矩阵。
③ 泰勒展开在优化中的应用 (Applications of Taylor Expansion in Optimization):
⚝ 近似目标函数 (Approximating Objective Function):在优化算法中,特别是牛顿法和拟牛顿法中,常常使用二阶泰勒展开来局部近似目标函数,将复杂的非线性优化问题转化为近似的二次优化问题进行求解。
⚝ 分析算法局部性质 (Analyzing Local Properties of Algorithms):泰勒展开可以用于分析优化算法在局部区域的收敛速度和稳定性。例如,通过分析牛顿法迭代公式的泰勒展开,可以证明其具有局部二次收敛性。
⚝ 推导优化算法 (Deriving Optimization Algorithms):许多优化算法的推导过程都基于泰勒展开。例如,梯度下降法可以看作是一阶泰勒展开的直接应用,而牛顿法可以看作是二阶泰勒展开的应用。
2.2.3 凸函数与凹函数 (Convex and Concave Functions)
凸函数 (Convex Function) 和 凹函数 (Concave Function) 是优化理论中非常重要的函数类型。凸函数具有良好的性质,使得基于凸函数的优化问题(凸优化问题)更容易求解,并且可以保证局部最优解就是全局最优解。凹函数与凸函数概念相对,性质类似。
① 凸函数 (Convex Function):
⚝ 定义 (Definition):设 \(C \subseteq \mathbb{R}^n\) 是一个凸集(convex set),函数 \( f: C \to \mathbb{R} \) 称为凸函数,如果对于任意 \( \mathbf{x}, \mathbf{y} \in C \) 和 \( \lambda \in [0, 1] \),满足:
\[ f(\lambda \mathbf{x} + (1 - \lambda) \mathbf{y}) \le \lambda f(\mathbf{x}) + (1 - \lambda) f(\mathbf{y}) \]
几何意义上,连接函数图像上任意两点 \( (\mathbf{x}, f(\mathbf{x})) \) 和 \( (\mathbf{y}, f(\mathbf{y})) \) 的线段,位于函数图像的上方或之上。
⚝ 一阶可微凸函数的等价条件 (Equivalent Condition for First-Order Differentiable Convex Functions):
如果函数 \( f: C \to \mathbb{R} \) 在凸集 \( C \) 上一阶可微,则 \( f \) 是凸函数当且仅当对于任意 \( \mathbf{x}, \mathbf{y} \in C \),满足:
\[ f(\mathbf{y}) \ge f(\mathbf{x}) + \nabla f(\mathbf{x})^T (\mathbf{y} - \mathbf{x}) \]
几何意义上,凸函数在任意一点的切线始终位于函数图像的下方或之下。
⚝ 二阶可微凸函数的等价条件 (Equivalent Condition for Second-Order Differentiable Convex Functions):
如果函数 \( f: \mathbb{R}^n \to \mathbb{R} \) 在凸集 \( C \) 上二阶可微,则 \( f \) 是凸函数当且仅当对于任意 \( \mathbf{x} \in C \),其海森矩阵 \( \mathbf{H}_f(\mathbf{x}) \) 是半正定矩阵 (Positive Semidefinite Matrix),即对于任意向量 \( \mathbf{z} \in \mathbb{R}^n \),有 \( \mathbf{z}^T \mathbf{H}_f(\mathbf{x}) \mathbf{z} \ge 0 \)。或者等价地,\( \mathbf{H}_f(\mathbf{x}) \) 的所有特征值都非负。
② 凹函数 (Concave Function):
⚝ 定义 (Definition):设 \(C \subseteq \mathbb{R}^n\) 是一个凸集,函数 \( f: C \to \mathbb{R} \) 称为凹函数,如果对于任意 \( \mathbf{x}, \mathbf{y} \in C \) 和 \( \lambda \in [0, 1] \),满足:
\[ f(\lambda \mathbf{x} + (1 - \lambda) \mathbf{y}) \ge \lambda f(\mathbf{x}) + (1 - \lambda) f(\mathbf{y}) \]
几何意义上,连接函数图像上任意两点 \( (\mathbf{x}, f(\mathbf{x})) \) 和 \( (\mathbf{y}, f(\mathbf{y})) \) 的线段,位于函数图像的下方或之下。
⚝ 凹函数与凸函数的关系 (Relationship between Concave and Convex Functions):
函数 \( f \) 是凹函数当且仅当 \( -f \) 是凸函数。
⚝ 凸函数与凹函数的性质 (Properties of Convex and Concave Functions):
⚝ 局部最优解是全局最优解 (Local Optimum is Global Optimum):对于凸函数,任何局部最小值也是全局最小值;对于凹函数,任何局部最大值也是全局最大值。
⚝ 凸函数的和、非负线性组合仍是凸函数 (Sum and Non-negative Linear Combination of Convex Functions are Convex):如果 \( f_1, f_2, \dots, f_k \) 是凸函数,\( \alpha_1, \alpha_2, \dots, \alpha_k \ge 0 \),则 \( \sum_{i=1}^{k} \alpha_i f_i \) 也是凸函数。
⚝ 凸函数的复合 (Composition with Affine Function):如果 \( f \) 是凸函数,\( \mathbf{A} \) 是矩阵,\( \mathbf{b} \) 是向量,则 \( g(\mathbf{x}) = f(\mathbf{A} \mathbf{x} + \mathbf{b}) \) 也是凸函数。
③ 常见凸函数示例 (Examples of Convex Functions):
⚝ 线性函数 (Linear Function):\( f(\mathbf{x}) = \mathbf{a}^T \mathbf{x} + b \) (既是凸函数也是凹函数)
⚝ 二次函数 (Quadratic Function):\( f(\mathbf{x}) = \frac{1}{2} \mathbf{x}^T \mathbf{Q} \mathbf{x} + \mathbf{b}^T \mathbf{x} + c \),其中 \( \mathbf{Q} \) 是半正定矩阵。
⚝ 指数函数 (Exponential Function):\( f(x) = e^{ax} \) (对于任意 \(a \in \mathbb{R}\))
⚝ 负对数函数 (Negative Logarithmic Function):\( f(x) = -\ln x \) (定义域为 \(x > 0\))
⚝ 范数 (Norm):\( f(\mathbf{x}) = \| \mathbf{x} \|_p \) (\(p \ge 1\))
凸函数和凹函数在优化理论中占据核心地位,凸优化理论是优化领域的重要分支,它研究如何高效地求解凸优化问题。
2.3 凸分析基础 (Basics of Convex Analysis)
凸分析 (Convex Analysis) 是研究凸集和凸函数性质的数学分支,它是凸优化理论的基石。理解凸分析的基本概念和性质,对于深入学习和应用凸优化至关重要。本节将介绍凸集、凸函数的性质以及凸优化问题的基本概念。
2.3.1 凸集 (Convex Sets)
凸集 (Convex Set) 是凸分析中最基本的概念之一。凸集的定义简单直观,但其性质却非常丰富,在优化理论中有着广泛的应用。
① 定义 (Definition):
集合 \(C \subseteq \mathbb{R}^n\) 称为凸集,如果对于任意 \( \mathbf{x}, \mathbf{y} \in C \) 和 \( \lambda \in [0, 1] \),连接 \( \mathbf{x} \) 和 \( \mathbf{y} \) 的线段上的所有点都属于 \(C\),即:
\[ \lambda \mathbf{x} + (1 - \lambda) \mathbf{y} \in C, \quad \forall \mathbf{x}, \mathbf{y} \in C, \forall \lambda \in [0, 1] \]
几何意义上,如果集合 \(C\) 中任意两点之间的连线段都完全包含在 \(C\) 内,则 \(C\) 是凸集。
② 凸集的例子 (Examples of Convex Sets):
⚝ 点和线 (Points and Lines):单个点 \( \{ \mathbf{x}_0 \} \) 和直线都是凸集。
⚝ 线段 (Line Segments):连接两点 \( \mathbf{x} \) 和 \( \mathbf{y} \) 的线段 \( \{ \lambda \mathbf{x} + (1 - \lambda) \mathbf{y} \mid 0 \le \lambda \le 1 \} \) 是凸集。
⚝ 超平面 (Hyperplanes):形如 \( \{ \mathbf{x} \mid \mathbf{a}^T \mathbf{x} = b \} \) 的集合是凸集,其中 \( \mathbf{a} \in \mathbb{R}^n, b \in \mathbb{R} \)。
⚝ 半空间 (Half-spaces):形如 \( \{ \mathbf{x} \mid \mathbf{a}^T \mathbf{x} \le b \} \) 或 \( \{ \mathbf{x} \mid \mathbf{a}^T \mathbf{x} \ge b \} \) 的集合是凸集。
⚝ 球 (Balls):以 \( \mathbf{x}_c \) 为中心,半径为 \( r \) 的球 \( \{ \mathbf{x} \mid \| \mathbf{x} - \mathbf{x}_c \| \le r \} \) 是凸集(对于任意范数 \( \| \cdot \| \))。
⚝ 椭球 (Ellipsoids):形如 \( \{ \mathbf{x} \mid (\mathbf{x} - \mathbf{x}_c)^T \mathbf{P}^{-1} (\mathbf{x} - \mathbf{x}_c) \le 1 \} \) 的集合是凸集,其中 \( \mathbf{P} \) 是对称正定矩阵。
⚝ 多面体 (Polyhedra):由有限个线性不等式和等式定义的集合 \( \{ \mathbf{x} \mid \mathbf{A} \mathbf{x} \preceq \mathbf{b}, \mathbf{C} \mathbf{x} = \mathbf{d} \} \) 是凸集,其中 \( \mathbf{A} \in \mathbb{R}^{m \times n}, \mathbf{b} \in \mathbb{R}^m, \mathbf{C} \in \mathbb{R}^{p \times n}, \mathbf{d} \in \mathbb{R}^p \),\( \preceq \) 表示分量wise不等式。
③ 凸集的运算性质 (Operations Preserving Convexity):
⚝ 交集 (Intersection):任意多个凸集的交集仍然是凸集。
⚝ 仿射变换 (Affine Transformation):如果 \(C\) 是凸集,\( \mathbf{A} \in \mathbb{R}^{m \times n}, \mathbf{b} \in \mathbb{R}^m \),则集合 \( \{ \mathbf{A} \mathbf{x} + \mathbf{b} \mid \mathbf{x} \in C \} \) 是凸集。
⚝ 伸缩和平移 (Scaling and Translation):如果 \(C\) 是凸集,\( \alpha \in \mathbb{R}, \mathbf{b} \in \mathbb{R}^n \),则集合 \( \alpha C = \{ \alpha \mathbf{x} \mid \mathbf{x} \in C \} \) 和 \( C + \mathbf{b} = \{ \mathbf{x} + \mathbf{b} \mid \mathbf{x} \in C \} \) 都是凸集。
⚝ 直和 (Direct Sum):如果 \(C_1 \subseteq \mathbb{R}^{n_1}\) 和 \(C_2 \subseteq \mathbb{R}^{n_2}\) 是凸集,则它们的直和 \( C_1 \times C_2 = \{ (\mathbf{x}_1, \mathbf{x}_2) \mid \mathbf{x}_1 \in C_1, \mathbf{x}_2 \in C_2 \} \subseteq \mathbb{R}^{n_1 + n_2} \) 也是凸集。
2.3.2 凸函数的性质 (Properties of Convex Functions)
凸函数除了定义中描述的性质外,还有许多重要的性质,这些性质使得凸优化问题具有良好的理论基础和高效的求解方法。
① 下水平集是凸集 (Sublevel Sets are Convex):
对于凸函数 \( f: \mathbb{R}^n \to \mathbb{R} \),任意 \( \alpha \in \mathbb{R} \),其下水平集 \( \{ \mathbf{x} \mid f(\mathbf{x}) \le \alpha \} \) 是凸集。反之不成立,即下水平集是凸集的函数不一定是凸函数。
② 局部最优解是全局最优解 (Local Optimum is Global Optimum):
对于凸函数 \( f \) 定义在凸集 \( C \) 上,如果 \( \mathbf{x}^* \in C \) 是局部最优解(局部最小值),则 \( \mathbf{x}^* \) 也是全局最优解(全局最小值)。这意味着对于凸优化问题,我们只需要找到局部最优解,就找到了全局最优解。
③ 最优性条件 (Optimality Condition):
对于可微凸函数 \( f \) 定义在凸集 \( C \) 上,点 \( \mathbf{x}^* \in C \) 是全局最优解当且仅当:
\[ \nabla f(\mathbf{x}^*)^T (\mathbf{x} - \mathbf{x}^*) \ge 0, \quad \forall \mathbf{x} \in C \]
如果 \( C = \mathbb{R}^n \),则最优性条件简化为 \( \nabla f(\mathbf{x}^*) = \mathbf{0} \)。
④ 延森不等式 (Jensen's Inequality):
对于凸函数 \( f \) 和随机变量 \( X \),如果期望 \( \mathbb{E}[X] \) 和 \( \mathbb{E}[f(X)] \) 存在,则:
\[ f(\mathbb{E}[X]) \le \mathbb{E}[f(X)] \]
延森不等式在概率论、信息论和优化理论中都有广泛应用。
2.3.3 凸优化问题 (Convex Optimization Problems)
凸优化问题 (Convex Optimization Problem) 是一类特殊的优化问题,其目标函数是凸函数,可行域是由凸集定义的。凸优化问题由于其良好的性质,成为优化理论中最重要的研究方向之一。
① 标准形式 (Standard Form):
一个凸优化问题通常可以表示为以下标准形式:
\[ \begin{aligned} & \min_{\mathbf{x}} & & f(\mathbf{x}) \\ & \text{s.t.} & & g_i(\mathbf{x}) \le 0, \quad i = 1, 2, \dots, m \\ & & & h_j(\mathbf{x}) = 0, \quad j = 1, 2, \dots, p \end{aligned} \]
其中,
⚝ \( f(\mathbf{x}) \) 是凸函数(目标函数)。
⚝ \( g_i(\mathbf{x}) \) 是凸函数(不等式约束函数)。
⚝ \( h_j(\mathbf{x}) \) 是仿射函数,即 \( h_j(\mathbf{x}) = \mathbf{a}_j^T \mathbf{x} + b_j \) (等式约束函数)。
可行域 \( \mathcal{X} = \{ \mathbf{x} \mid g_i(\mathbf{x}) \le 0, i = 1, \dots, m, h_j(\mathbf{x}) = 0, j = 1, \dots, p \} \) 是凸集,因为凸函数的下水平集是凸集,仿射函数的零水平集也是凸集,凸集的交集仍然是凸集。
② 凸优化问题的优点 (Advantages of Convex Optimization Problems):
⚝ 全局最优解 (Global Optimality):凸优化问题的任何局部最优解都是全局最优解。
⚝ 高效求解算法 (Efficient Algorithms):存在许多高效的算法可以求解凸优化问题,例如内点法 (Interior Point Method)、梯度下降法 (Gradient Descent Method) 的变种等。
⚝ 对偶理论 (Duality Theory):凸优化问题具有完善的对偶理论,可以从对偶问题的角度分析原问题,并得到有用的信息。
③ 常见的凸优化问题类型 (Common Types of Convex Optimization Problems):
⚝ 线性规划 (Linear Programming, LP):目标函数和约束函数都是线性函数。
⚝ 二次规划 (Quadratic Programming, QP):目标函数是二次函数,约束函数是线性函数。
⚝ 二次锥规划 (Second-Order Cone Programming, SOCP):约束条件包含二次锥不等式。
⚝ 半定规划 (Semidefinite Programming, SDP):决策变量是半正定矩阵,约束条件是线性矩阵不等式。
凸优化理论为解决实际问题提供了强大的工具。许多工程、经济、金融、机器学习等领域的问题都可以建模为凸优化问题,并利用凸优化理论和算法进行求解。
本章回顾了优化理论所需的数学基础知识,包括线性代数、微积分和凸分析的基本概念和性质。这些数学工具将为后续章节深入探讨各种优化算法和理论奠定坚实的基础。理解这些基础知识是掌握优化理论的关键,也是应用优化方法解决实际问题的必要准备。
3. chapter 3: 线性规划 (Linear Programming)
3.1 线性规划问题建模 (Modeling Linear Programming Problems)
线性规划 (Linear Programming, LP) 是运筹学 (Operations Research) 中最基本、最重要的分支之一,它研究的是在一组线性约束条件 (linear constraints) 下,最大化或最小化一个线性目标函数 (linear objective function) 的问题。由于其模型简单、应用广泛,线性规划在工业、农业、商业、军事等领域都发挥着至关重要的作用。
线性规划问题的基本特征:
① 决策变量 (Decision Variables): 线性规划旨在找到一组决策变量的值,这些变量代表了我们可控制的因素,例如生产数量、资源分配量等。决策变量通常是连续的,可以取实数值。
② 目标函数 (Objective Function): 存在一个需要优化(最大化或最小化)的目标函数,它是关于决策变量的线性函数。例如,最大化利润、最小化成本等。目标函数的线性性是线性规划的核心特征之一。
③ 约束条件 (Constraints): 决策变量需要满足一组线性约束条件,这些约束条件限定了决策变量的取值范围。约束条件可以是等式约束或不等式约束,例如资源限制、市场需求限制等。约束条件的线性性同样是线性规划的关键特征。
线性规划问题的数学模型:
一个标准的线性规划问题可以用以下数学形式表示:
\[ \begin{aligned} \text{优化目标 (Optimize)} & \quad z = c_1x_1 + c_2x_2 + \cdots + c_nx_n \\ \text{约束条件 (Subject to)} & \quad a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n \leq b_1 \\ & \quad a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n \leq b_2 \\ & \quad \vdots \\ & \quad a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n \leq b_m \\ & \quad x_1, x_2, \cdots, x_n \geq 0 \end{aligned} \]
其中:
⚝ \(x_1, x_2, \cdots, x_n\) 是决策变量。
⚝ \(c_1, c_2, \cdots, c_n\) 是目标函数系数,表示每个决策变量对目标函数的贡献。
⚝ \(a_{ij}\) 是约束系数,表示在第 \(i\) 个约束中,第 \(j\) 个决策变量的系数。
⚝ \(b_1, b_2, \cdots, b_m\) 是资源约束或右端项,表示第 \(i\) 个约束的限制值。
⚝ 不等式 \(\leq\) 可以根据具体问题替换为 \(\geq\) 或 \(=\)。
⚝ \(x_j \geq 0\) 表示非负约束,在许多实际问题中,决策变量通常是非负的。
线性规划的标准形式与规范形式:
为了方便理论分析和算法设计,线性规划问题通常被转化为标准形式 (Standard Form) 或 规范形式 (Canonical Form)。
标准形式 (Standard Form):
线性规划的标准形式通常要求:
① 目标函数为最大化 (Maximize)。
② 所有约束条件均为等式约束 (Equality Constraints)。
③ 所有决策变量均为非负 (Non-negative)。
任何线性规划问题都可以通过以下方法转化为标准形式:
① 目标函数转化: 如果目标是最小化 \(z = cx\),可以转化为最大化 \(-z = -cx\)。
② 不等式约束转化:
▮▮▮▮⚝ 对于 \(\sum_{j=1}^{n} a_{ij}x_j \leq b_i\) 约束,引入松弛变量 (Slack Variable) \(s_i \geq 0\),将其转化为等式约束 \(\sum_{j=1}^{n} a_{ij}x_j + s_i = b_i\)。
▮▮▮▮⚝ 对于 \(\sum_{j=1}^{n} a_{ij}x_j \geq b_i\) 约束,引入剩余变量 (Surplus Variable) \(e_i \geq 0\),将其转化为等式约束 \(\sum_{j=1}^{n} a_{ij}x_j - e_i = b_i\)。
③ 变量无约束转化: 如果存在无约束变量 \(x_j\),可以使用两个非负变量之差来表示,例如令 \(x_j = x_j^+ - x_j^-\),其中 \(x_j^+ \geq 0, x_j^- \geq 0\)。
规范形式 (Canonical Form):
线性规划的规范形式通常要求:
① 目标函数为最大化 (Maximize) 或 最小化 (Minimize)。
② 所有约束条件均为不等式约束 (Inequality Constraints) (全部为 \(\leq\) 或全部为 \(\geq\))。
③ 所有决策变量均为非负 (Non-negative)。
规范形式更接近于问题建模的自然形式,标准形式则更利于算法的统一描述。在实际应用中,根据具体情况选择合适的模型形式非常重要。
线性规划建模示例:
例 3.1 (生产计划问题): 某工厂生产两种产品 A 和 B,生产单位产品 A 需要 2 小时 labor 和 1 单位 raw material,获得利润 3 元;生产单位产品 B 需要 1 小时 labor 和 2 单位 raw material,获得利润 4 元。工厂每天可用的 labor 为 8 小时,raw material 为 5 单位。如何安排生产计划,使总利润最大?
建模步骤:
① 确定决策变量: 设 \(x_1\) 为产品 A 的生产数量,\(x_2\) 为产品 B 的生产数量。
② 确定目标函数: 目标是最大化总利润,目标函数为 \(z = 3x_1 + 4x_2\)。
③ 确定约束条件:
▮▮▮▮⚝ labor 约束: \(2x_1 + x_2 \leq 8\)
▮▮▮▮⚝ raw material 约束: \(x_1 + 2x_2 \leq 5\)
▮▮▮▮⚝ 非负约束: \(x_1 \geq 0, x_2 \geq 0\)
完整的线性规划模型为:
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = 3x_1 + 4x_2 \\ \text{约束条件 (Subject to)} & \quad 2x_1 + x_2 \leq 8 \\ & \quad x_1 + 2x_2 \leq 5 \\ & \quad x_1 \geq 0, x_2 \geq 0 \end{aligned} \]
通过以上建模过程,我们将一个实际的生产计划问题转化为了一个可以用线性规划方法求解的数学问题。线性规划建模的关键在于准确地识别决策变量、目标函数和约束条件,并将它们用线性的数学表达式表示出来。
3.2 图解法 (Graphical Method)
图解法 (Graphical Method) 是一种求解两个决策变量线性规划问题的直观方法。它通过在二维坐标系中绘制可行域 (feasible region) 和等值线 (iso-value lines),从而找到最优解 (optimal solution)。图解法不仅可以帮助我们求解问题,更重要的是能够直观地理解线性规划问题的几何意义。
图解法的步骤:
① 绘制可行域:
▮▮▮▮⚝ 将每个约束条件视为二维平面上的一条直线。
▮▮▮▮⚝ 对于不等式约束,确定直线所界定的区域。例如,对于 \(ax_1 + bx_2 \leq c\),通常可以通过测试原点 (0, 0) 是否满足不等式来确定区域。
▮▮▮▮⚝ 所有约束条件所确定的区域的交集即为可行域。可行域表示满足所有约束条件的决策变量的取值范围。
② 绘制等值线:
▮▮▮▮⚝ 将目标函数 \(z = c_1x_1 + c_2x_2\) 看作一组平行直线。对于给定的目标函数值 \(z_0\),方程 \(c_1x_1 + c_2x_2 = z_0\) 表示一条等值线,线上所有点对应的目标函数值均为 \(z_0\)。
▮▮▮▮⚝ 通过改变 \(z_0\) 的值,可以得到一系列平行的等值线。
③ 寻找最优解:
▮▮▮▮⚝ 对于最大化问题,沿着目标函数值增大的方向平移等值线,直到等值线刚离开可行域的位置。此时,等值线与可行域的交点(通常是顶点)即为最优解。
▮▮▮▮⚝ 对于最小化问题,沿着目标函数值减小的方向平移等值线,直到等值线刚离开可行域的位置。此时,等值线与可行域的交点(通常是顶点)即为最优解。
图解法示例:
例 3.2 (续例 3.1): 使用图解法求解例 3.1 的生产计划问题。
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = 3x_1 + 4x_2 \\ \text{约束条件 (Subject to)} & \quad 2x_1 + x_2 \leq 8 \\ & \quad x_1 + 2x_2 \leq 5 \\ & \quad x_1 \geq 0, x_2 \geq 0 \end{aligned} \]
解题步骤:
① 绘制可行域:
▮▮▮▮⚝ 约束 \(2x_1 + x_2 \leq 8\) 对应的直线为 \(2x_1 + x_2 = 8\)。当 \(x_1 = 0\) 时,\(x_2 = 8\);当 \(x_2 = 0\) 时,\(x_1 = 4\)。连接点 (0, 8) 和 (4, 0) 得到直线。由于 \(2 \times 0 + 0 \leq 8\) 成立,可行域在直线下方。
▮▮▮▮⚝ 约束 \(x_1 + 2x_2 \leq 5\) 对应的直线为 \(x_1 + 2x_2 = 5\)。当 \(x_1 = 0\) 时,\(x_2 = 2.5\);当 \(x_2 = 0\) 时,\(x_1 = 5\)。连接点 (0, 2.5) 和 (5, 0) 得到直线。由于 \(0 + 2 \times 0 \leq 5\) 成立,可行域在直线下方。
▮▮▮▮⚝ 约束 \(x_1 \geq 0\) 和 \(x_2 \geq 0\) 表示可行域在第一象限。
▮▮▮▮⚝ 可行域为上述所有区域的交集,是一个多边形区域。
② 绘制等值线:
▮▮▮▮⚝ 目标函数 \(z = 3x_1 + 4x_2\) 的等值线为 \(3x_1 + 4x_2 = z_0\)。例如,当 \(z_0 = 0\) 时,等值线为 \(3x_1 + 4x_2 = 0\),过原点。当 \(z_0 = 12\) 时,等值线为 \(3x_1 + 4x_2 = 12\)。
③ 寻找最优解:
▮▮▮▮⚝ 沿着目标函数值增大的方向(即等值线向右上方平移),平移等值线,直到等值线刚离开可行域。
▮▮▮▮⚝ 观察到最优解在可行域的顶点处取得。可行域的顶点包括 (0, 0), (4, 0), (0, 2.5) 以及两条直线的交点。
▮▮▮▮⚝ 计算交点:
\[ \begin{cases} 2x_1 + x_2 = 8 \\ x_1 + 2x_2 = 5 \end{cases} \]
解得 \(x_1 = \frac{11}{3} \approx 3.67\), \(x_2 = \frac{2}{3} \approx 0.67\)。交点为 \((\frac{11}{3}, \frac{2}{3})\)。
▮▮▮▮⚝ 计算各顶点对应的目标函数值:
▮▮▮▮▮▮▮▮⚝ (0, 0): \(z = 3 \times 0 + 4 \times 0 = 0\)
▮▮▮▮▮▮▮▮⚝ (4, 0): \(z = 3 \times 4 + 4 \times 0 = 12\)
▮▮▮▮▮▮▮▮⚝ (0, 2.5): \(z = 3 \times 0 + 4 \times 2.5 = 10\)
▮▮▮▮▮▮▮▮⚝ \((\frac{11}{3}, \frac{2}{3})\): \(z = 3 \times \frac{11}{3} + 4 \times \frac{2}{3} = 11 + \frac{8}{3} = \frac{41}{3} \approx 13.67\)
▮▮▮▮⚝ 比较各顶点目标函数值,最大值为 \(\frac{41}{3}\) 在顶点 \((\frac{11}{3}, \frac{2}{3})\) 处取得。
结论: 最优生产计划为生产产品 A 约 3.67 单位,产品 B 约 0.67 单位,最大利润约为 13.67 元。
图解法的特点:
① 直观性: 图解法能够直观地展示可行域和最优解的位置,易于理解线性规划问题的几何意义。
② 局限性: 图解法仅适用于两个决策变量的线性规划问题。对于三个或更多变量的问题,无法直接使用图解法。
③ 教学价值: 图解法是学习线性规划的入门方法,有助于理解基本概念,为学习更复杂的算法(如单纯形法)打下基础。
3.3 单纯形法 (Simplex Method)
单纯形法 (Simplex Method) 是一种求解一般线性规划问题的经典迭代算法。由 George Dantzig 于 1947 年提出,单纯形法以其高效性和通用性,成为线性规划领域最重要的方法之一。单纯形法的核心思想是在可行域的顶点 (vertex) 之间移动,逐步改进目标函数值,最终找到最优解。
3.3.1 基本可行解 (Basic Feasible Solution)
在理解单纯形法之前,需要先了解基本可行解 (Basic Feasible Solution, BFS) 的概念。基本可行解是单纯形法的基础,它与可行域的顶点密切相关。
基本解 (Basic Solution):
考虑标准形式的线性规划问题:
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = cx \\ \text{约束条件 (Subject to)} & \quad Ax = b \\ & \quad x \geq 0 \end{aligned} \]
其中,\(A\) 是 \(m \times n\) 矩阵,\(x\) 是 \(n \times 1\) 向量,\(b\) 是 \(m \times 1\) 向量,\(c\) 是 \(1 \times n\) 向量。假设 \(rank(A) = m \leq n\)。
基本解是通过将 \(n\) 个变量分为基变量 (Basic Variables) 和 非基变量 (Non-basic Variables) 来获得的解。具体步骤如下:
① 从矩阵 \(A\) 中选取 \(m\) 个线性无关的列向量,构成一个 \(m \times m\) 的基矩阵 (Basis Matrix) \(B\)。剩余的 \(n-m\) 列向量构成非基矩阵 (Non-basis Matrix) \(N\)。相应地,将变量 \(x\) 和系数矩阵 \(A\) 分解为:
\[ A = [B \quad N], \quad x = \begin{bmatrix} x_B \\ x_N \end{bmatrix}, \quad c = [c_B \quad c_N] \]
其中,\(x_B\) 是 基变量向量,\(x_N\) 是 非基变量向量,\(c_B\) 和 \(c_N\) 分别是对应的目标函数系数向量。
② 令非基变量 \(x_N = 0\)。
③ 解方程组 \(Bx_B = b\),得到基变量 \(x_B = B^{-1}b\)。
④ 得到的解 \(x = \begin{bmatrix} x_B \\ x_N \end{bmatrix} = \begin{bmatrix} B^{-1}b \\ 0 \end{bmatrix}\) 称为基本解。
基本可行解 (Basic Feasible Solution, BFS):
如果一个基本解 \(x = \begin{bmatrix} x_B \\ x_N \end{bmatrix} = \begin{bmatrix} B^{-1}b \\ 0 \end{bmatrix}\) 满足可行性条件,即 \(x_B = B^{-1}b \geq 0\),则称其为基本可行解。
基本可行解与顶点:
在线性规划中,基本可行解与可行域的顶点是一一对应的。这意味着,线性规划问题的最优解(如果存在)一定可以在某个基本可行解(顶点)处找到。单纯形法正是基于这一重要性质,通过在基本可行解之间迭代搜索,最终找到最优解。
寻找初始基本可行解:
单纯形法需要一个初始基本可行解作为迭代的起点。对于某些线性规划问题,可以直接找到一个初始基本可行解。但对于一般问题,可能需要引入人工变量 (Artificial Variables),使用两阶段法 (Two-Phase Method) 或 大 M 法 (Big-M Method) 来寻找初始基本可行解。这些方法将在后续章节中详细介绍。
3.3.2 单纯形法的迭代步骤 (Iterative Steps of Simplex Method)
单纯形法的核心思想是从一个基本可行解出发,通过迭代逐步改进目标函数值,直到达到最优解或判断问题无界。单纯形法的迭代过程主要包括以下步骤:
① 初始化 (Initialization):
▮▮▮▮⚝ 将线性规划问题转化为标准形式。
▮▮▮▮⚝ 找到一个初始基本可行解。如果问题本身具有明显的初始基本可行解(例如,所有约束条件都是 \(\leq\) 且右端项非负,可以取松弛变量为基变量,原变量为非基变量),则可以直接使用。否则,需要使用两阶段法或大 M 法找到初始基本可行解。
▮▮▮▮⚝ 构建单纯形表 (Simplex Tableau)。单纯形表是记录迭代过程和进行计算的重要工具。
② 最优性检验 (Optimality Test):
▮▮▮▮⚝ 计算检验数 (Reduced Cost) \(\sigma_j = c_j - z_j = c_j - c_B B^{-1} a_j\),对于所有非基变量 \(x_j\)。其中 \(a_j\) 是矩阵 \(A\) 的第 \(j\) 列向量。
▮▮▮▮⚝ 若所有非基变量的检验数 \(\sigma_j \leq 0\) (对于最大化问题),则当前基本可行解为最优解,算法终止。
▮▮▮▮⚝ 若存在检验数 \(\sigma_j > 0\),则当前解不是最优解,需要进行迭代改进。
③ 选择入基变量 (Entering Variable):
▮▮▮▮⚝ 在检验数 \(\sigma_j > 0\) 的非基变量中,选择最大的检验数对应的变量作为入基变量。设入基变量为 \(x_k\)。入基变量的选择原则是使目标函数值增长最快。
④ 选择出基变量 (Leaving Variable):
▮▮▮▮⚝ 计算比值 (Ratio) \(\theta_i = \frac{b_i'}{a_{ik}'}\),对于所有 \(a_{ik}' > 0\) 的基变量 \(x_{B_i}\)。其中 \(b' = B^{-1}b\), \(A' = B^{-1}A\)。
▮▮▮▮⚝ 选择最小比值对应的基变量作为出基变量。设出基变量为 \(x_{B_l}\)。出基变量的选择原则是保证迭代后的解仍然是基本可行解。
▮▮▮▮⚝ 若所有 \(a_{ik}' \leq 0\),则问题无界 (unbounded),算法终止。
⑤ 基变换 (Basis Update):
▮▮▮▮⚝ 将入基变量 \(x_k\) 替换出基变量 \(x_{B_l}\) 成为新的基变量。
▮▮▮▮⚝ 使用行变换 (Elementary Row Operations) 更新单纯形表,使得入基变量 \(x_k\) 对应的列向量在基矩阵 \(B\) 中的位置变为单位向量,即主元素 \(a_{lk}'\) 变为 1,同一列的其他元素变为 0。这一过程称为转轴运算 (Pivoting)。
⑥ 迭代 (Iteration):
▮▮▮▮⚝ 返回步骤 ②,重复进行最优性检验、选择入基变量、选择出基变量和基变换,直到找到最优解或判断问题无界。
单纯形法示例:
例 3.3 (续例 3.1): 使用单纯形法求解例 3.1 的生产计划问题。
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = 3x_1 + 4x_2 \\ \text{约束条件 (Subject to)} & \quad 2x_1 + x_2 \leq 8 \\ & \quad x_1 + 2x_2 \leq 5 \\ & \quad x_1 \geq 0, x_2 \geq 0 \end{aligned} \]
解题步骤:
① 标准化: 引入松弛变量 \(s_1, s_2 \geq 0\),将不等式约束转化为等式约束。
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = 3x_1 + 4x_2 \\ \text{约束条件 (Subject to)} & \quad 2x_1 + x_2 + s_1 = 8 \\ & \quad x_1 + 2x_2 + s_2 = 5 \\ & \quad x_1 \geq 0, x_2 \geq 0, s_1 \geq 0, s_2 \geq 0 \end{aligned} \]
② 初始单纯形表: 选择 \(s_1, s_2\) 为初始基变量,\(x_1, x_2\) 为非基变量。初始基本可行解为 \(x_1 = 0, x_2 = 0, s_1 = 8, s_2 = 5\),目标函数值 \(z = 0\)。
基变量 (Basic Variables) | \(x_1\) | \(x_2\) | \(s_1\) | \(s_2\) | 右端项 (RHS) |
---|---|---|---|---|---|
\(s_1\) | 2 | 1 | 1 | 0 | 8 |
\(s_2\) | 1 | 2 | 0 | 1 | 5 |
\(z\) | -3 | -4 | 0 | 0 | 0 |
③ 迭代 1:
▮▮▮▮⚝ 最优性检验: 检验数 \(\sigma_{x_1} = -3 < 0\), \(\sigma_{x_2} = -4 < 0\)。存在负检验数,当前解不是最优解。
▮▮▮▮⚝ 入基变量: 选择检验数最小的 \(x_2\) 作为入基变量。
▮▮▮▮⚝ 出基变量: 计算比值:
▮▮▮▮▮▮▮▮⚝ \(\theta_{s_1} = \frac{8}{1} = 8\)
▮▮▮▮▮▮▮▮⚝ \(\theta_{s_2} = \frac{5}{2} = 2.5\)
最小比值为 \(\theta_{s_2} = 2.5\),选择 \(s_2\) 作为出基变量。
▮▮▮▮⚝ 转轴运算: 以第 2 行第 2 列元素 2 为主元素进行行变换。
基变量 (Basic Variables) | \(x_1\) | \(x_2\) | \(s_1\) | \(s_2\) | 右端项 (RHS) |
---|---|---|---|---|---|
\(s_1\) | 3/2 | 0 | 1 | -1/2 | 5.5 |
\(x_2\) | 1/2 | 1 | 0 | 1/2 | 2.5 |
\(z\) | -1 | 0 | 0 | 2 | 10 |
④ 迭代 2:
▮▮▮▮⚝ 最优性检验: 检验数 \(\sigma_{x_1} = -1 < 0\), \(\sigma_{s_2} = 2 > 0\)。存在负检验数,当前解不是最优解。
▮▮▮▮⚝ 入基变量: 选择检验数最小的 \(x_1\) 作为入基变量。
▮▮▮▮⚝ 出基变量: 计算比值:
▮▮▮▮▮▮▮▮⚝ \(\theta_{s_1} = \frac{5.5}{3/2} = \frac{11}{3} \approx 3.67\)
▮▮▮▮▮▮▮▮⚝ \(\theta_{x_2} = \frac{2.5}{1/2} = 5\)
最小比值为 \(\theta_{s_1} = \frac{11}{3}\),选择 \(s_1\) 作为出基变量。
▮▮▮▮⚝ 转轴运算: 以第 1 行第 1 列元素 3/2 为主元素进行行变换。
基变量 (Basic Variables) | \(x_1\) | \(x_2\) | \(s_1\) | \(s_2\) | 右端项 (RHS) |
---|---|---|---|---|---|
\(x_1\) | 1 | 0 | 2/3 | -1/3 | 11/3 |
\(x_2\) | 0 | 1 | -1/3 | 2/3 | 2/3 |
\(z\) | 0 | 0 | 2/3 | 5/3 | 41/3 |
⑤ 最优性检验: 检验数 \(\sigma_{s_1} = 2/3 > 0\), \(\sigma_{s_2} = 5/3 > 0\)。所有检验数均非负,当前解为最优解。
最优解: \(x_1 = \frac{11}{3}\), \(x_2 = \frac{2}{3}\), \(s_1 = 0\), \(s_2 = 0\),最大目标函数值 \(z = \frac{41}{3}\)。
单纯形法的特点:
① 通用性: 单纯形法可以求解各种类型的线性规划问题,包括最大化、最小化、等式约束、不等式约束等。
② 迭代性: 单纯形法是一种迭代算法,通过逐步改进基本可行解,最终找到最优解。
③ 效率: 在实际应用中,单纯形法通常具有较高的效率,能够快速求解中等规模的线性规划问题。但在最坏情况下,单纯形法的迭代次数可能呈指数级增长。
④ 理论基础: 单纯形法建立在线性规划的理论基础之上,具有严谨的数学证明和完善的理论体系。
3.4 对偶理论 (Duality Theory)
对偶理论 (Duality Theory) 是线性规划的重要组成部分,它研究的是原问题 (Primal Problem) 与 对偶问题 (Dual Problem) 之间的关系。对偶理论不仅提供了从另一个角度分析线性规划问题的途径,还在灵敏度分析、算法设计等方面具有重要应用价值。
3.4.1 对偶问题的构建 (Formulation of Dual Problem)
对于每一个线性规划原问题,都存在一个与之对应的对偶问题。原问题和对偶问题之间存在着密切的数学联系。
原问题 (Primal Problem) - 标准形式 (最大化):
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = cx \\ \text{约束条件 (Subject to)} & \quad Ax \leq b \\ & \quad x \geq 0 \end{aligned} \]
对偶问题 (Dual Problem) - 标准形式 (最小化):
\[ \begin{aligned} \text{最小化 (Minimize)} & \quad w = b^Ty \\ \text{约束条件 (Subject to)} & \quad A^Ty \geq c \\ & \quad y \geq 0 \end{aligned} \]
其中:
⚝ 原问题的决策变量为 \(x\),对偶问题的决策变量为 \(y\)。
⚝ 原问题的目标函数系数 \(c\) 成为对偶问题的约束条件右端项。
⚝ 原问题的约束条件右端项 \(b\) 成为对偶问题的目标函数系数。
⚝ 原问题的约束矩阵 \(A\) 转置后成为对偶问题的约束矩阵 \(A^T\)。
⚝ 原问题的约束不等号方向为 \(\leq\),对偶问题的约束不等号方向为 \(\geq\)。
⚝ 原问题是最大化问题,对偶问题是最小化问题。
对偶问题的构建规则:
① 目标函数类型: 原问题为最大化,对偶问题为最小化;原问题为最小化,对偶问题为最大化。
② 约束条件类型:
▮▮▮▮⚝ 原问题第 \(i\) 个约束为 \(\leq\) 不等式,对偶问题第 \(i\) 个变量 \(y_i\) 为非负约束 (\(y_i \geq 0\))。
▮▮▮▮⚝ 原问题第 \(i\) 个约束为 \(\geq\) 不等式,对偶问题第 \(i\) 个变量 \(y_i\) 为非正约束 (\(y_i \leq 0\))。
▮▮▮▮⚝ 原问题第 \(i\) 个约束为等式约束,对偶问题第 \(i\) 个变量 \(y_i\) 无约束。
③ 变量类型:
▮▮▮▮⚝ 原问题第 \(j\) 个变量 \(x_j\) 为非负约束 (\(x_j \geq 0\)),对偶问题第 \(j\) 个约束为 \(\geq\) 不等式。
▮▮▮▮⚝ 原问题第 \(j\) 个变量 \(x_j\) 为非正约束 (\(x_j \leq 0\)),对偶问题第 \(j\) 个约束为 \(\leq\) 不等式。
▮▮▮▮⚝ 原问题第 \(j\) 个变量 \(x_j\) 无约束,对偶问题第 \(j\) 个约束为等式约束。
例 3.4 (例 3.1 的对偶问题): 写出例 3.1 生产计划问题的对偶问题。
原问题:
\[ \begin{aligned} \text{最大化 (Maximize)} & \quad z = 3x_1 + 4x_2 \\ \text{约束条件 (Subject to)} & \quad 2x_1 + x_2 \leq 8 \\ & \quad x_1 + 2x_2 \leq 5 \\ & \quad x_1 \geq 0, x_2 \geq 0 \end{aligned} \]
对偶问题:
根据对偶问题的构建规则,设对偶变量为 \(y_1, y_2\)。
\[ \begin{aligned} \text{最小化 (Minimize)} & \quad w = 8y_1 + 5y_2 \\ \text{约束条件 (Subject to)} & \quad 2y_1 + y_2 \geq 3 \\ & \quad y_1 + 2y_2 \geq 4 \\ & \quad y_1 \geq 0, y_2 \geq 0 \end{aligned} \]
3.4.2 强对偶与弱对偶 (Strong and Weak Duality)
对偶理论的核心内容是对偶定理 (Duality Theorem),它描述了原问题和对偶问题最优解之间的关系。对偶定理分为弱对偶定理 (Weak Duality Theorem) 和 强对偶定理 (Strong Duality Theorem)。
弱对偶定理 (Weak Duality Theorem):
设 \(x\) 是原问题的任意可行解,\(y\) 是对偶问题的任意可行解,则有:
\[ cx \leq b^Ty \]
对于最大化原问题和最小化对偶问题,原问题目标函数值总是小于等于对偶问题目标函数值。
推论:
① 如果原问题是最大化问题,对偶问题是最小化问题,且存在可行解,则原问题目标函数值的上界是对偶问题任意可行解的目标函数值,对偶问题目标函数值的下界是原问题任意可行解的目标函数值。
② 如果 \(x^*\) 是原问题的可行解,\(y^*\) 是对偶问题的可行解,且 \(cx^* = b^Ty^*\),则 \(x^*\) 和 \(y^*\) 分别是原问题和对偶问题的最优解。
强对偶定理 (Strong Duality Theorem):
① 如果原问题存在最优解 \(x^*\),则对偶问题也存在最优解 \(y^*\),且最优目标函数值相等:
\[ cx^* = b^Ty^* \]
② 如果对偶问题存在最优解 \(y^*\),则原问题也存在最优解 \(x^*\),且最优目标函数值相等:
\[ cx^* = b^Ty^* \]
③ 如果原问题和对偶问题都存在可行解,则它们都存在最优解,且最优目标函数值相等。
④ 如果原问题无界,则对偶问题无可行解。反之,如果对偶问题无界,则原问题无可行解。
互补松弛定理 (Complementary Slackness Theorem):
设 \(x^*\) 和 \(y^*\) 分别是原问题和对偶问题的可行解,则 \(x^*\) 和 \(y^*\) 均为最优解的充要条件是满足以下互补松弛条件:
① 原问题松弛互补条件: 对于原问题的第 \(i\) 个约束 \(\sum_{j=1}^{n} a_{ij}x_j \leq b_i\),若为严格不等式 (\(\sum_{j=1}^{n} a_{ij}x_j < b_i\)),则对偶变量 \(y_i^* = 0\);若 \(y_i^* > 0\),则原问题第 \(i\) 个约束为等式 (\(\sum_{j=1}^{n} a_{ij}x_j = b_i\))。
② 对偶问题松弛互补条件: 对于对偶问题的第 \(j\) 个约束 \(\sum_{i=1}^{m} a_{ij}y_i \geq c_j\),若为严格不等式 (\(\sum_{i=1}^{m} a_{ij}y_i > c_j\)),则原问题变量 \(x_j^* = 0\);若 \(x_j^* > 0\),则对偶问题第 \(j\) 个约束为等式 (\(\sum_{i=1}^{m} a_{ij}y_i = c_j\))。
互补松弛定理为判断最优解和求解对偶问题提供了重要依据。
对偶理论的应用:
① 求解对偶问题: 如果原问题不易求解,可以尝试求解对偶问题。有时对偶问题比原问题更容易求解。
② 灵敏度分析: 对偶变量 \(y_i^*\) 在经济学上可以解释为第 \(i\) 种资源的影子价格 (Shadow Price),表示当第 \(i\) 种资源增加一个单位时,目标函数最优值的增加量。对偶理论为灵敏度分析提供了理论基础。
③ 算法设计: 对偶理论可以用于设计新的优化算法,例如对偶单纯形法 (Dual Simplex Method) 等。
3.5 灵敏度分析 (Sensitivity Analysis)
灵敏度分析 (Sensitivity Analysis) 是研究当线性规划问题的参数 (Parameters) 发生变化时,最优解和最优目标函数值如何变化的分析方法。线性规划模型的参数包括目标函数系数 \(c_j\)、约束条件右端项 \(b_i\) 和约束系数 \(a_{ij}\)。在实际应用中,这些参数往往不是固定不变的,可能会受到市场、技术、政策等因素的影响。因此,进行灵敏度分析对于理解模型的稳定性和指导决策具有重要意义。
灵敏度分析的主要内容:
① 目标函数系数 \(c_j\) 的灵敏度分析: 研究当某个目标函数系数 \(c_j\) 在一定范围内变化时,最优解和最优目标函数值如何变化。通常关注允许 \(c_j\) 变化的范围,使得当前最优基保持不变。
② 约束条件右端项 \(b_i\) 的灵敏度分析: 研究当某个约束条件右端项 \(b_i\) 在一定范围内变化时,最优解和最优目标函数值如何变化。通常关注允许 \(b_i\) 变化的范围,使得当前最优基保持不变。影子价格 \(y_i^*\) 就是 \(b_i\) 变化对最优目标函数值的影响。
③ 约束系数 \(a_{ij}\) 的灵敏度分析: 研究当某个约束系数 \(a_{ij}\) 发生变化时,最优解和最优目标函数值如何变化。约束系数的灵敏度分析相对复杂,通常需要重新求解线性规划问题或进行更深入的分析。
灵敏度分析的方法:
灵敏度分析通常基于单纯形法的最终单纯形表进行。通过分析最终单纯形表中的信息,可以确定参数允许变化的范围和变化对最优解的影响。
① 目标函数系数 \(c_j\) 的灵敏度分析:
▮▮▮▮⚝ 对于非基变量 \(x_j\),允许 \(c_j\) 增加的最大量 \(\Delta c_j\) 是使得检验数 \(\sigma_j = c_j - z_j\) 仍然满足最优性条件 (\(\sigma_j \leq 0\) for maximization)。
▮▮▮▮⚝ 对于基变量 \(x_{B_j}\),允许 \(c_{B_j}\) 变化的范围需要更复杂的计算,通常需要重新计算检验数和比值,并保持最优基不变。
② 约束条件右端项 \(b_i\) 的灵敏度分析:
▮▮▮▮⚝ 允许 \(b_i\) 变化的范围是使得基变量 \(x_B = B^{-1}b\) 仍然满足非负性条件 (\(x_B \geq 0\)) 的范围。
▮▮▮▮⚝ 影子价格 \(y_i^*\) 是对偶问题的最优解,也等于最终单纯形表中松弛变量 \(s_i\) (或剩余变量 \(e_i\)) 对应的检验数的绝对值 (对于最大化问题)。影子价格表示当 \(b_i\) 增加一个单位时,最优目标函数值的增加量。
灵敏度分析示例:
例 3.5 (续例 3.3): 对例 3.3 的生产计划问题进行灵敏度分析。
最终单纯形表如下:
基变量 (Basic Variables) | \(x_1\) | \(x_2\) | \(s_1\) | \(s_2\) | 右端项 (RHS) |
---|---|---|---|---|---|
\(x_1\) | 1 | 0 | 2/3 | -1/3 | 11/3 |
\(x_2\) | 0 | 1 | -1/3 | 2/3 | 2/3 |
\(z\) | 0 | 0 | 2/3 | 5/3 | 41/3 |
① 目标函数系数 \(c_1\) 的灵敏度分析: \(x_1\) 是基变量,假设 \(c_1\) 变为 \(3 + \Delta c_1\)。需要重新计算检验数并保持最优基不变。
② 目标函数系数 \(c_2\) 的灵敏度分析: \(x_2\) 是基变量,假设 \(c_2\) 变为 \(4 + \Delta c_2\)。需要重新计算检验数并保持最优基不变。
③ 约束条件右端项 \(b_1\) 的灵敏度分析: \(b_1 = 8\) (labor hours)。影子价格 \(y_1^* = \frac{2}{3}\)。表示 labor hours 每增加 1 小时,最大利润增加 \(\frac{2}{3}\) 元。允许 \(b_1\) 变化的范围需要计算,保证 \(x_B = B^{-1}b \geq 0\)。
④ 约束条件右端项 \(b_2\) 的灵敏度分析: \(b_2 = 5\) (raw material units)。影子价格 \(y_2^* = \frac{5}{3}\)。表示 raw material units 每增加 1 单位,最大利润增加 \(\frac{5}{3}\) 元。允许 \(b_2\) 变化的范围需要计算,保证 \(x_B = B^{-1}b \geq 0\)。
灵敏度分析的意义:
① 评估模型稳定性: 灵敏度分析可以帮助我们了解模型对参数变化的敏感程度,评估模型的稳定性。
② 指导决策: 灵敏度分析可以为管理者提供决策支持,例如,了解增加资源投入对利润的影响,评估市场变化对生产计划的影响等。
③ 识别关键参数: 灵敏度分析可以帮助我们识别对最优解和最优目标函数值影响较大的关键参数,从而更加关注这些参数的准确性和变化趋势。
通过本章的学习,我们系统地介绍了线性规划的基本概念、建模方法、求解算法(图解法和单纯形法)、对偶理论和灵敏度分析。线性规划作为优化理论的重要分支,在实际应用中具有广泛的应用价值。掌握线性规划的理论和方法,对于解决实际问题、进行科学决策具有重要意义。
4. chapter 4: 无约束优化 (Unconstrained Optimization)
4.1 无约束优化问题概述 (Overview of Unconstrained Optimization Problems)
在优化理论 (Optimization Theory) 中,无约束优化 (Unconstrained Optimization) 是最基本且重要的组成部分。顾名思义,无约束优化问题旨在寻找一个函数在没有约束条件下的最优值,即最大值 (maximum) 或最小值 (minimum)。这类问题在实际应用中非常广泛,例如机器学习中的模型参数优化、工程设计中的性能指标优化等。
更具体地说,一个典型的无约束优化问题可以表述为:
\[ \min_{ \mathbf{x} \in \mathbb{R}^n } f(\mathbf{x}) \]
或
\[ \max_{ \mathbf{x} \in \mathbb{R}^n } f(\mathbf{x}) \]
其中,\( \mathbf{x} = [x_1, x_2, \ldots, x_n]^T \) 是 \( n \) 维决策变量 (decision variables) 向量,\( f(\mathbf{x}) \) 是目标函数 (objective function),它将 \( n \) 维向量映射到一个实数。我们的目标是找到一个 \( \mathbf{x}^* \in \mathbb{R}^n \),使得 \( f(\mathbf{x}^*) \) 在所有可能的 \( \mathbf{x} \in \mathbb{R}^n \) 中达到最小(或最大)值。
与约束优化 (Constrained Optimization) 问题不同,无约束优化问题中,决策变量 \( \mathbf{x} \) 的取值范围不受任何限制,可以在整个 \( n \) 维实数空间 \( \mathbb{R}^n \) 中自由变化。这使得无约束优化问题在理论分析和算法设计上相对简单,是理解和解决更复杂优化问题的基础。
应用领域 (Application Areas)
无约束优化在多个领域都有着重要的应用,以下列举一些典型的例子:
① 机器学习 (Machine Learning):在机器学习中,很多模型的训练过程都可以转化为无约束优化问题。例如,线性回归 (Linear Regression)、逻辑回归 (Logistic Regression)、神经网络 (Neural Networks) 等模型的参数学习,通常通过最小化损失函数 (loss function) 来实现,而损失函数往往是关于模型参数的无约束函数。
② 工程设计 (Engineering Design):在工程设计领域,优化设计参数以达到最佳性能指标是一个常见的问题。例如,在结构设计中,工程师可能需要调整结构参数以最小化材料用量,同时满足强度和稳定性要求。在某些简化模型下,这类问题可以转化为无约束优化问题。
③ 经济学 (Economics):在经济学中,无约束优化被用来分析消费者的效用最大化问题、生产者的利润最大化问题等。例如,消费者在给定预算约束下,选择各种商品以最大化其效用,如果忽略预算约束,或者将预算约束融入效用函数中,则可以转化为无约束优化问题。
④ 图像处理 (Image Processing):在图像处理领域,很多图像恢复、图像增强等问题可以通过求解无约束优化问题来解决。例如,图像去噪问题可以通过最小化一个能量函数来实现,该能量函数通常包含数据项和正则化项,且是关于图像像素值的无约束函数。
求解方法 (Solution Methods)
针对无约束优化问题,已经发展了许多有效的求解方法。这些方法可以大致分为两类:解析方法 (Analytical Methods) 和 数值方法 (Numerical Methods)。
⚝ 解析方法:对于一些特殊形式的无约束优化问题,例如目标函数是二次函数,或者具有简单的结构,我们可以通过解析的方法,例如求导数并令其为零 (setting derivatives to zero),直接求出最优解的解析表达式 (analytical expression)。然而,对于更一般的目标函数,解析方法往往难以应用。
⚝ 数值方法:当解析方法失效时,我们需要借助数值方法来求解无约束优化问题。数值方法通过迭代的方式,逐步逼近最优解。常见的数值方法包括:
▮▮▮▮⚝ 梯度下降法 (Gradient Descent Method)
▮▮▮▮⚝ 牛顿法 (Newton's Method)
▮▮▮▮⚝ 共轭梯度法 (Conjugate Gradient Method)
▮▮▮▮⚝ 拟牛顿法 (Quasi-Newton Methods)
▮▮▮▮⚝ 信赖域方法 (Trust Region Methods)
本章将重点介绍无约束优化的最优性条件 (optimality conditions),以及几种经典的数值优化算法 (numerical optimization algorithms),包括梯度下降法、牛顿法和共轭梯度法。这些方法是理解和应用更高级优化算法的基础。
4.2 最优性条件 (Optimality Conditions)
在求解无约束优化问题时,最优性条件 (Optimality Conditions) 起着至关重要的作用。最优性条件可以帮助我们判断一个点是否是局部最优解 (local optimal solution),以及如何寻找最优解。本节将介绍无约束优化的一阶必要条件 (First-Order Necessary Condition) 和 二阶充分条件 (Second-Order Sufficient Condition)。
4.2.1 一阶必要条件 (First-Order Necessary Condition)
一阶必要条件 (First-Order Necessary Condition) 是判断一个点是否为局部最优解的必要条件 (necessary condition)。它基于目标函数的一阶导数信息,即梯度 (gradient)。
定理 4.2.1 (一阶必要条件): 设 \( f: \mathbb{R}^n \rightarrow \mathbb{R} \) 在点 \( \mathbf{x}^* \) 处可微。如果 \( \mathbf{x}^* \) 是局部极小点 (local minimum) 或局部极大点 (local maximum),则目标函数 \( f \) 在点 \( \mathbf{x}^* \) 处的梯度必须为零向量,即:
\[ \nabla f(\mathbf{x}^*) = \mathbf{0} \]
其中,\( \nabla f(\mathbf{x}^*) \) 表示 \( f \) 在 \( \mathbf{x}^* \) 处的梯度。
几何解释 (Geometric Interpretation)
从几何角度来看,梯度 \( \nabla f(\mathbf{x}) \) 指向函数 \( f \) 在点 \( \mathbf{x} \) 处增长最快的方向。如果 \( \mathbf{x}^* \) 是局部极小点,那么在 \( \mathbf{x}^* \) 附近,沿着任何方向移动,函数值都不会进一步减小。这意味着在 \( \mathbf{x}^* \) 处,函数曲面的切平面 (tangent plane) 是水平的,即梯度为零向量。
驻点 (Stationary Point)
满足一阶必要条件 \( \nabla f(\mathbf{x}^*) = \mathbf{0} \) 的点 \( \mathbf{x}^* \) 被称为驻点 (stationary point) 或 临界点 (critical point)。需要注意的是,驻点只是局部最优解的候选点 (candidate point),一个驻点可能是局部极小点、局部极大点,也可能是鞍点 (saddle point)。为了进一步判断驻点的类型,我们需要借助二阶导数信息。
例子 4.2.1: 考虑一元函数 \( f(x) = x^3 - 3x \)。求其驻点。
解: 首先计算函数 \( f(x) \) 的导数:
\[ f'(x) = 3x^2 - 3 \]
令 \( f'(x) = 0 \),解得:
\[ 3x^2 - 3 = 0 \implies x^2 = 1 \implies x = \pm 1 \]
因此,函数 \( f(x) \) 的驻点为 \( x = 1 \) 和 \( x = -1 \)。
4.2.2 二阶充分条件 (Second-Order Sufficient Condition)
二阶充分条件 (Second-Order Sufficient Condition) 是判断一个驻点是否为局部最优解的充分条件 (sufficient condition)。它基于目标函数的二阶导数信息,即 Hessian矩阵 (Hessian matrix)。
定义 4.2.2 (Hessian矩阵): 设 \( f: \mathbb{R}^n \rightarrow \mathbb{R} \) 在点 \( \mathbf{x} \) 处二阶可微。函数 \( f \) 在点 \( \mathbf{x} \) 处的 Hessian矩阵 (Hessian matrix) \( \mathbf{H}_f(\mathbf{x}) \) 定义为一个 \( n \times n \) 的对称矩阵,其 \( (i, j) \) 元素为:
\[ [\mathbf{H}_f(\mathbf{x})]_{ij} = \frac{\partial^2 f(\mathbf{x})}{\partial x_i \partial x_j} \]
定理 4.2.3 (二阶充分条件): 设 \( f: \mathbb{R}^n \rightarrow \mathbb{R} \) 在点 \( \mathbf{x}^* \) 处二阶可微,且 \( \nabla f(\mathbf{x}^*) = \mathbf{0} \)。
① 如果 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}^*) \) 是 正定矩阵 (positive definite),则 \( \mathbf{x}^* \) 是局部极小点。
② 如果 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}^*) \) 是 负定矩阵 (negative definite),则 \( \mathbf{x}^* \) 是局部极大点。
③ 如果 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}^*) \) 是 不定矩阵 (indefinite),则 \( \mathbf{x}^* \) 是鞍点。
正定矩阵、负定矩阵和不定矩阵 (Positive Definite, Negative Definite, and Indefinite Matrices)
⚝ 正定矩阵 (Positive Definite Matrix):一个对称矩阵 \( \mathbf{A} \) 是正定的,如果对于所有非零向量 \( \mathbf{d} \in \mathbb{R}^n \),都有 \( \mathbf{d}^T \mathbf{A} \mathbf{d} > 0 \)。等价地,正定矩阵的所有特征值都为正数。
⚝ 负定矩阵 (Negative Definite Matrix):一个对称矩阵 \( \mathbf{A} \) 是负定的,如果对于所有非零向量 \( \mathbf{d} \in \mathbb{R}^n \),都有 \( \mathbf{d}^T \mathbf{A} \mathbf{d} < 0 \)。等价地,负定矩阵的所有特征值都为负数。
⚝ 不定矩阵 (Indefinite Matrix):一个对称矩阵 \( \mathbf{A} \) 是不定的,如果存在向量 \( \mathbf{d}_1 \) 和 \( \mathbf{d}_2 \),使得 \( \mathbf{d}_1^T \mathbf{A} \mathbf{d}_1 > 0 \) 且 \( \mathbf{d}_2^T \mathbf{A} \mathbf{d}_2 < 0 \)。等价地,不定矩阵既有正特征值,也有负特征值。
例子 4.2.2: 继续考虑例子 4.2.1 中的函数 \( f(x) = x^3 - 3x \)。判断驻点 \( x = 1 \) 和 \( x = -1 \) 的类型。
解: 函数 \( f(x) \) 的二阶导数为:
\[ f''(x) = 6x \]
⚝ 对于驻点 \( x = 1 \),\( f''(1) = 6 > 0 \)。根据二阶充分条件,\( x = 1 \) 是局部极小点。
⚝ 对于驻点 \( x = -1 \),\( f''(-1) = -6 < 0 \)。根据二阶充分条件,\( x = -1 \) 是局部极大点。
总结 (Summary)
最优性条件为我们判断无约束优化问题的局部最优解提供了理论基础。一阶必要条件指出局部最优解必须是驻点,而二阶充分条件则进一步判断驻点的类型。在实际应用中,我们通常先求解一阶必要条件得到驻点,然后利用二阶充分条件判断驻点的类型。然而,需要注意的是,二阶充分条件只是充分条件,如果 Hessian 矩阵是半正定 (positive semi-definite) 或 半负定 (negative semi-definite),则无法直接判断驻点的类型,需要进一步分析。
4.3 梯度下降法 (Gradient Descent Method)
梯度下降法 (Gradient Descent Method) 是最优化领域中最经典、最基础的算法之一。它是一种迭代优化算法 (iterative optimization algorithm),用于寻找函数的局部最小值。梯度下降法的基本思想是沿着目标函数负梯度方向 (negative gradient direction) 迭代搜索,因为负梯度方向是函数值下降最快的方向。
4.3.1 固定步长梯度下降 (Fixed Step Size Gradient Descent)
固定步长梯度下降法 (Fixed Step Size Gradient Descent Method) 是最简单的梯度下降法变体。它在每次迭代中使用固定的步长 (step size) (或称为学习率 (learning rate)) 来更新决策变量。
算法 4.3.1 (固定步长梯度下降法)
① 初始化:选择初始点 \( \mathbf{x}_0 \),固定步长 \( \alpha > 0 \),设置迭代次数 \( k = 0 \)。
② 迭代更新:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k - \alpha \nabla f(\mathbf{x}_k) \]
③ 终止条件:检查是否满足终止条件,例如迭代次数达到预设值,或者梯度范数 \( \| \nabla f(\mathbf{x}_k) \| \) 小于预设阈值。如果满足终止条件,则停止迭代,输出 \( \mathbf{x}_k \) 作为近似最优解;否则,令 \( k = k + 1 \),返回步骤 ②。
算法解释 (Algorithm Explanation)
在每次迭代中,算法首先计算当前点 \( \mathbf{x}_k \) 处的梯度 \( \nabla f(\mathbf{x}_k) \)。然后,沿着负梯度方向 \( - \nabla f(\mathbf{x}_k) \) 移动步长 \( \alpha \),得到新的迭代点 \( \mathbf{x}_{k+1} \)。重复这个过程,直到满足终止条件。
步长 \( \alpha \) 的选择 (Choice of Step Size \( \alpha \))
固定步长 \( \alpha \) 的选择对梯度下降法的收敛性 (convergence) 和收敛速度 (convergence rate) 有着重要影响。
⚝ 步长过大 (Large Step Size):如果步长 \( \alpha \) 过大,可能导致迭代点在最优解附近震荡,甚至发散 (divergence),无法收敛到最优解。
⚝ 步长过小 (Small Step Size):如果步长 \( \alpha \) 过小,虽然可以保证算法收敛,但收敛速度会非常慢,需要很多次迭代才能达到最优解附近。
因此,选择合适的固定步长 \( \alpha \) 非常重要。在实际应用中,通常需要通过实验来调整步长,或者采用一些启发式的方法来选择步长。
优点与缺点 (Advantages and Disadvantages)
⚝ 优点 (Advantages):
▮▮▮▮⚝ 算法简单,易于实现。
▮▮▮▮⚝ 每次迭代计算量小,主要计算梯度 \( \nabla f(\mathbf{x}_k) \)。
⚝ 缺点 (Disadvantages):
▮▮▮▮⚝ 收敛速度慢,尤其是在接近最优解时,收敛速度会变得更慢。
▮▮▮▮⚝ 对步长 \( \alpha \) 的选择敏感,不合适的步长可能导致不收敛或收敛速度过慢。
▮▮▮▮⚝ 容易陷入局部极小 (local minimum) 或 鞍点 (saddle point)。
4.3.2 线搜索 (Line Search)
为了克服固定步长梯度下降法对步长选择的敏感性,人们提出了线搜索 (Line Search) 技术。线搜索的目标是在每次迭代中,沿着负梯度方向,寻找一个最优步长 (optimal step size),使得目标函数值能够得到最大程度的下降。
基本思想 (Basic Idea)
在梯度下降法的每次迭代中,给定当前点 \( \mathbf{x}_k \) 和搜索方向 \( \mathbf{d}_k = - \nabla f(\mathbf{x}_k) \),线搜索的目标是求解以下一维优化问题:
\[ \min_{\alpha > 0} \phi(\alpha) = f(\mathbf{x}_k + \alpha \mathbf{d}_k) \]
其中,\( \phi(\alpha) \) 是关于步长 \( \alpha \) 的一元函数。求解这个一维优化问题,得到最优步长 \( \alpha_k^* \),然后更新迭代点:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k^* \mathbf{d}_k = \mathbf{x}_k - \alpha_k^* \nabla f(\mathbf{x}_k) \]
线搜索方法分类 (Classification of Line Search Methods)
线搜索方法可以分为两类:精确线搜索 (Exact Line Search) 和 非精确线搜索 (Inexact Line Search)。
⚝ 精确线搜索 (Exact Line Search):精确线搜索旨在找到一维优化问题 \( \min_{\alpha > 0} \phi(\alpha) \) 的全局最优解 (global optimal solution) \( \alpha_k^* \)。常见的精确线搜索方法包括黄金分割法 (Golden-section Search)、二分法 (Bisection Method)、牛顿法 (Newton's Method) 等。精确线搜索的优点是可以保证每次迭代都找到最优步长,从而加快收敛速度。但缺点是计算量较大,尤其当目标函数 \( f \) 比较复杂时,求解一维优化问题的代价很高。
⚝ 非精确线搜索 (Inexact Line Search):非精确线搜索旨在找到一个近似最优步长 (approximately optimal step size) \( \alpha_k \),使得目标函数值能够得到充分下降 (sufficient decrease),同时计算量相对较小。常见的非精确线搜索方法包括 Armijo 准则 (Armijo Condition)、Wolfe 准则 (Wolfe Conditions)、Goldstein 准则 (Goldstein Conditions) 等。
Armijo 回溯线搜索 (Armijo Backtracking Line Search)
Armijo 回溯线搜索 (Armijo Backtracking Line Search) 是一种常用的非精确线搜索方法。它通过回溯的方式,逐步减小步长,直到满足 Armijo 准则 (Armijo Condition)。
Armijo 准则 (Armijo Condition): 步长 \( \alpha \) 满足 Armijo 准则,如果:
\[ f(\mathbf{x}_k + \alpha \mathbf{d}_k) \leq f(\mathbf{x}_k) + c_1 \alpha \nabla f(\mathbf{x}_k)^T \mathbf{d}_k \]
其中,\( c_1 \in (0, 1) \) 是一个预设的常数,通常取 \( c_1 = 10^{-4} \)。Armijo 准则要求函数值 \( f(\mathbf{x}_k + \alpha \mathbf{d}_k) \) 的下降量至少与线性预测下降量 \( -c_1 \alpha \nabla f(\mathbf{x}_k)^T \mathbf{d}_k \) 成比例。
算法 4.3.2 (Armijo 回溯线搜索)
① 初始化:给定当前点 \( \mathbf{x}_k \),搜索方向 \( \mathbf{d}_k = - \nabla f(\mathbf{x}_k) \),初始步长 \( \alpha = \alpha_0 > 0 \),参数 \( c_1 \in (0, 1) \),回溯因子 \( \rho \in (0, 1) \),例如 \( \alpha_0 = 1 \),\( c_1 = 10^{-4} \),\( \rho = 0.5 \)。
② 检查 Armijo 准则:判断步长 \( \alpha \) 是否满足 Armijo 准则:
\[ f(\mathbf{x}_k + \alpha \mathbf{d}_k) \leq f(\mathbf{x}_k) + c_1 \alpha \nabla f(\mathbf{x}_k)^T \mathbf{d}_k \]
③ 如果满足 Armijo 准则,则步长 \( \alpha \) 满足要求,输出步长 \( \alpha_k = \alpha \)。
④ 如果不满足 Armijo 准则,则缩小步长:\( \alpha = \rho \alpha \),返回步骤 ②。
梯度下降法结合 Armijo 线搜索 (Gradient Descent Method with Armijo Line Search)
将 Armijo 回溯线搜索应用于梯度下降法,可以得到 梯度下降法结合 Armijo 线搜索 (Gradient Descent Method with Armijo Line Search) 算法。该算法在每次迭代中,先计算负梯度方向,然后使用 Armijo 回溯线搜索确定步长,最后更新迭代点。
优点与缺点 (Advantages and Disadvantages)
⚝ 优点 (Advantages):
▮▮▮▮⚝ 相比固定步长梯度下降法,对步长选择的敏感性降低,鲁棒性更强。
▮▮▮▮⚝ 能够保证每次迭代目标函数值都下降,从而保证算法的收敛性。
▮▮▮▮⚝ 计算量适中,每次线搜索只需要进行函数值和梯度的计算。
⚝ 缺点 (Disadvantages):
▮▮▮▮⚝ 收敛速度仍然较慢,尤其是在接近最优解时。
▮▮▮▮⚝ 仍然可能陷入局部极小或鞍点。
4.4 牛顿法 (Newton's Method)
牛顿法 (Newton's Method) 是一种更高级的无约束优化算法。与梯度下降法只利用目标函数的一阶导数信息 (梯度) 不同,牛顿法还利用了目标函数的二阶导数信息 (Hessian矩阵)。这使得牛顿法在很多情况下具有更快的收敛速度。
基本思想 (Basic Idea)
牛顿法的基本思想是利用目标函数 \( f(\mathbf{x}) \) 在当前迭代点 \( \mathbf{x}_k \) 处的 二次泰勒展开 (quadratic Taylor expansion) 来近似目标函数,然后将二次模型的最小值点作为下一个迭代点。
目标函数 \( f(\mathbf{x}) \) 在 \( \mathbf{x}_k \) 处的二次泰勒展开为:
\[ f(\mathbf{x}) \approx f(\mathbf{x}_k) + \nabla f(\mathbf{x}_k)^T (\mathbf{x} - \mathbf{x}_k) + \frac{1}{2} (\mathbf{x} - \mathbf{x}_k)^T \mathbf{H}_f(\mathbf{x}_k) (\mathbf{x} - \mathbf{x}_k) \]
为了找到二次模型的最小值点,我们对上式关于 \( \mathbf{x} \) 求导,并令导数为零:
\[ \nabla f(\mathbf{x}_k) + \mathbf{H}_f(\mathbf{x}_k) (\mathbf{x} - \mathbf{x}_k) = \mathbf{0} \]
假设 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}_k) \) 可逆 (invertible),我们可以解出 \( \mathbf{x} \):
\[ \mathbf{x} = \mathbf{x}_k - \mathbf{H}_f(\mathbf{x}_k)^{-1} \nabla f(\mathbf{x}_k) \]
将上式得到的 \( \mathbf{x} \) 作为下一个迭代点 \( \mathbf{x}_{k+1} \),就得到了牛顿法的迭代公式:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k - \mathbf{H}_f(\mathbf{x}_k)^{-1} \nabla f(\mathbf{x}_k) \]
算法 4.4.1 (牛顿法)
① 初始化:选择初始点 \( \mathbf{x}_0 \),设置迭代次数 \( k = 0 \)。
② 迭代更新:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k - \mathbf{H}_f(\mathbf{x}_k)^{-1} \nabla f(\mathbf{x}_k) \]
③ 终止条件:检查是否满足终止条件,例如迭代次数达到预设值,或者梯度范数 \( \| \nabla f(\mathbf{x}_k) \| \) 小于预设阈值。如果满足终止条件,则停止迭代,输出 \( \mathbf{x}_k \) 作为近似最优解;否则,令 \( k = k + 1 \),返回步骤 ②。
算法解释 (Algorithm Explanation)
在每次迭代中,算法首先计算当前点 \( \mathbf{x}_k \) 处的梯度 \( \nabla f(\mathbf{x}_k) \) 和 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}_k) \)。然后,计算 Hessian矩阵的逆矩阵 \( \mathbf{H}_f(\mathbf{x}_k)^{-1} \),并利用迭代公式更新迭代点 \( \mathbf{x}_{k+1} \)。
收敛性与收敛速度 (Convergence and Convergence Rate)
如果初始点 \( \mathbf{x}_0 \) 足够接近局部最优解 \( \mathbf{x}^* \),且 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}^*) \) 正定,则牛顿法具有局部二阶收敛性 (local quadratic convergence)。这意味着,当迭代点接近最优解时,误差的下降速度非常快,每次迭代误差 लगभग 平方倍减小。
优点与缺点 (Advantages and Disadvantages)
⚝ 优点 (Advantages):
▮▮▮▮⚝ 收敛速度快,具有局部二阶收敛性。
▮▮▮▮⚝ 不需要手动选择步长,算法本身确定搜索方向和步长。
⚝ 缺点 (Disadvantages):
▮▮▮▮⚝ 计算量大,每次迭代需要计算梯度 \( \nabla f(\mathbf{x}_k) \) 和 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}_k) \),以及 Hessian矩阵的逆矩阵 \( \mathbf{H}_f(\mathbf{x}_k)^{-1} \)。
▮▮▮▮⚝ 要求 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}_k) \) 可逆,且正定。如果 Hessian矩阵 奇异 (singular) 或 不定 (indefinite),牛顿法可能失效。
▮▮▮▮⚝ 对初始点 \( \mathbf{x}_0 \) 的选择敏感,如果初始点远离最优解,可能不收敛或收敛到非最优解。
▮▮▮▮⚝ 仍然可能陷入局部极小或鞍点。
改进的牛顿法 (Modified Newton's Method)
为了克服牛顿法的缺点,人们提出了许多改进的牛顿法,例如:
⚝ 阻尼牛顿法 (Damped Newton's Method):在牛顿法的迭代公式中引入步长 \( \alpha_k \):
\[ \mathbf{x}_{k+1} = \mathbf{x}_k - \alpha_k \mathbf{H}_f(\mathbf{x}_k)^{-1} \nabla f(\mathbf{x}_k) \]
步长 \( \alpha_k \) 可以通过线搜索确定,例如 Armijo 线搜索。阻尼牛顿法可以提高算法的全局收敛性。
⚝ 修正牛顿法 (Modified Newton's Method):当 Hessian矩阵 \( \mathbf{H}_f(\mathbf{x}_k) \) 不正定时,对其进行修正,例如通过特征值修正或对角加载等方法,使其变为正定矩阵,从而保证搜索方向是下降方向。
⚝ 拟牛顿法 (Quasi-Newton Methods):拟牛顿法使用近似 Hessian矩阵 (approximate Hessian matrix) 代替真实的 Hessian矩阵,从而降低计算量。常见的拟牛顿法包括 DFP算法 (Davidon-Fletcher-Powell Algorithm)、BFGS算法 (Broyden-Fletcher-Goldfarb-Shanno Algorithm) 等。
4.5 共轭梯度法 (Conjugate Gradient Method)
共轭梯度法 (Conjugate Gradient Method) 是一种介于梯度下降法和牛顿法之间的优化算法。它比梯度下降法收敛速度更快,但计算量又比牛顿法小。共轭梯度法特别适用于求解大型线性方程组 (large-scale linear systems) 和 二次优化问题 (quadratic optimization problems)。
基本思想 (Basic Idea)
共轭梯度法的基本思想是在每次迭代中,选择一个共轭方向 (conjugate direction) 作为搜索方向。与梯度下降法只使用负梯度方向作为搜索方向不同,共轭梯度法在选择搜索方向时,考虑了之前迭代的搜索方向,以避免在已经搜索过的方向上重复搜索,从而加快收敛速度。
共轭方向 (Conjugate Directions)
对于一个对称正定矩阵 \( \mathbf{A} \),两个非零向量 \( \mathbf{d}_1 \) 和 \( \mathbf{d}_2 \) 被称为关于 \( \mathbf{A} \) 共轭 (conjugate) 的,如果:
\[ \mathbf{d}_1^T \mathbf{A} \mathbf{d}_2 = 0 \]
如果 \( \mathbf{A} \) 是单位矩阵 \( \mathbf{I} \),则共轭方向退化为正交方向 (orthogonal directions)。共轭方向是正交方向的推广。
线性共轭梯度法 (Linear Conjugate Gradient Method)
对于求解线性方程组 \( \mathbf{A} \mathbf{x} = \mathbf{b} \),其中 \( \mathbf{A} \) 是对称正定矩阵,线性共轭梯度法通过迭代的方式,逐步逼近方程组的解。
算法 4.5.1 (线性共轭梯度法)
① 初始化:选择初始点 \( \mathbf{x}_0 \),计算残差 \( \mathbf{r}_0 = \mathbf{b} - \mathbf{A} \mathbf{x}_0 \),设置初始搜索方向 \( \mathbf{d}_0 = \mathbf{r}_0 \),迭代次数 \( k = 0 \)。
② 迭代更新:
▮▮▮▮ⓒ 计算步长:
\[ \alpha_k = \frac{\mathbf{r}_k^T \mathbf{r}_k}{\mathbf{d}_k^T \mathbf{A} \mathbf{d}_k} \]
▮▮▮▮ⓑ 更新迭代点:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{d}_k \]
▮▮▮▮ⓒ 更新残差:
\[ \mathbf{r}_{k+1} = \mathbf{r}_k - \alpha_k \mathbf{A} \mathbf{d}_k \]
▮▮▮▮ⓓ 计算共轭参数:
\[ \beta_{k+1} = \frac{\mathbf{r}_{k+1}^T \mathbf{r}_{k+1}}{\mathbf{r}_k^T \mathbf{r}_k} \]
▮▮▮▮ⓔ 更新搜索方向:
\[ \mathbf{d}_{k+1} = \mathbf{r}_{k+1} + \beta_{k+1} \mathbf{d}_k \]
③ 终止条件:检查是否满足终止条件,例如残差范数 \( \| \mathbf{r}_k \| \) 小于预设阈值。如果满足终止条件,则停止迭代,输出 \( \mathbf{x}_k \) 作为近似解;否则,令 \( k = k + 1 \),返回步骤 ②。
非线性共轭梯度法 (Nonlinear Conjugate Gradient Method)
对于非线性无约束优化问题 \( \min_{\mathbf{x}} f(\mathbf{x}) \),可以将线性共轭梯度法推广到非线性情况,得到 非线性共轭梯度法 (Nonlinear Conjugate Gradient Method)。非线性共轭梯度法的基本思想仍然是选择共轭方向作为搜索方向,但步长和共轭参数的计算方式需要进行调整。
算法 4.5.2 (非线性共轭梯度法)
① 初始化:选择初始点 \( \mathbf{x}_0 \),计算梯度 \( \mathbf{g}_0 = \nabla f(\mathbf{x}_0) \),设置初始搜索方向 \( \mathbf{d}_0 = - \mathbf{g}_0 \),迭代次数 \( k = 0 \)。
② 迭代更新:
▮▮▮▮ⓒ 线搜索确定步长 \( \alpha_k \),例如使用 Armijo 线搜索,使得 \( \alpha_k \) 近似求解以下一维优化问题:
\[ \min_{\alpha > 0} f(\mathbf{x}_k + \alpha \mathbf{d}_k) \]
▮▮▮▮ⓑ 更新迭代点:
\[ \mathbf{x}_{k+1} = \mathbf{x}_k + \alpha_k \mathbf{d}_k \]
▮▮▮▮ⓒ 计算梯度 \( \mathbf{g}_{k+1} = \nabla f(\mathbf{x}_{k+1}) \)。
▮▮▮▮ⓓ 计算共轭参数 \( \beta_{k+1} \),常用的计算公式包括 Fletcher-Reeves 公式 (FR Formula)、Polak-Ribière-Polyak 公式 (PRP Formula)、Hestenes-Stiefel 公式 (HS Formula) 等。例如,FR 公式为:
\[ \beta_{k+1}^{FR} = \frac{\mathbf{g}_{k+1}^T \mathbf{g}_{k+1}}{\mathbf{g}_k^T \mathbf{g}_k} \]
▮▮▮▮ⓔ 更新搜索方向:
\[ \mathbf{d}_{k+1} = - \mathbf{g}_{k+1} + \beta_{k+1} \mathbf{d}_k \]
③ 终止条件:检查是否满足终止条件,例如梯度范数 \( \| \mathbf{g}_k \| \) 小于预设阈值。如果满足终止条件,则停止迭代,输出 \( \mathbf{x}_k \) 作为近似最优解;否则,令 \( k = k + 1 \),返回步骤 ②。
优点与缺点 (Advantages and Disadvantages)
⚝ 优点 (Advantages):
▮▮▮▮⚝ 收敛速度比梯度下降法快,尤其对于二次优化问题,理论上可以在有限步内收敛。
▮▮▮▮⚝ 每次迭代计算量比牛顿法小,只需要计算梯度,不需要计算 Hessian矩阵和逆矩阵。
▮▮▮▮⚝ 适用于求解大型优化问题。
⚝ 缺点 (Disadvantages):
▮▮▮▮⚝ 收敛速度不如牛顿法,尤其对于非二次优化问题。
▮▮▮▮⚝ 对线搜索的精度要求较高,不精确的线搜索可能导致算法性能下降。
▮▮▮▮⚝ 仍然可能陷入局部极小或鞍点。
总结 (Summary)
共轭梯度法是一种有效的无约束优化算法,它在收敛速度和计算量之间取得了较好的平衡。在实际应用中,共轭梯度法常被用于求解大型优化问题,例如机器学习中的模型训练、图像处理等领域。不同的共轭参数计算公式和线搜索策略会影响算法的性能,需要根据具体问题选择合适的变体。
5. chapter 5: 约束优化 (Constrained Optimization)
5.1 约束优化问题概述 (Overview of Constrained Optimization Problems)
在之前的章节中,我们主要探讨了无约束优化 (Unconstrained Optimization) 问题,即在没有限制条件的情况下,寻找目标函数的最优解。然而,在现实世界的诸多问题中,决策变量往往会受到各种各样的约束 (Constraints) 的限制。这些约束可能是资源限制、物理限制、技术限制或是其他实际条件的反映。因此,约束优化 (Constrained Optimization) 成为了优化理论中至关重要的一个分支。
约束优化问题,顾名思义,就是在一定的约束条件下,寻找目标函数的最优解。与无约束优化问题相比,约束优化问题的解空间被限制在由约束条件所定义的可行域 (Feasible Region) 内。这使得约束优化问题的求解更具挑战性,但也更贴近实际应用场景。
一个典型的约束优化问题可以用以下数学形式表示:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & g_i(x) \leq 0, \quad i = 1, 2, \dots, m \\ & h_j(x) = 0, \quad j = 1, 2, \dots, p \end{aligned} \]
其中:
⚝ \(x \in \mathbb{R}^n\) 是 决策变量 (Decision Variables) 向量。
⚝ \(f(x)\) 是 目标函数 (Objective Function),我们希望最小化(或最大化)的目标。
⚝ \(g_i(x) \leq 0\) 是 不等式约束 (Inequality Constraints),共有 \(m\) 个。它们定义了可行域的边界。
⚝ \(h_j(x) = 0\) 是 等式约束 (Equality Constraints),共有 \(p\) 个。它们也限制了解的范围,通常将可行域限制在一个曲面上。
⚝ “s.t.” 是 “subject to” 的缩写,表示 “受限于”。
约束的类型 (Types of Constraints):
约束条件可以分为以下几种主要类型:
① 等式约束 (Equality Constraints): 形如 \(h_j(x) = 0\) 的约束,要求解必须精确地满足等式。例如,在工程设计中,可能要求某些物理量保持恒定。
② 不等式约束 (Inequality Constraints): 形如 \(g_i(x) \leq 0\) 或 \(g_i(x) \geq 0\) 的约束,要求解满足一定的范围限制。例如,资源量不能超过上限,产品质量指标必须达到最低标准等。
③ 线性约束 (Linear Constraints) 与 非线性约束 (Nonlinear Constraints): 根据约束函数 \(g_i(x)\) 和 \(h_j(x)\) 的形式,约束可以进一步分为线性约束和非线性约束。
▮▮▮▮⚝ 线性约束 (Linear Constraints): 约束函数是线性的,即可以表示为 \(a^T x \leq b\) 或 \(a^T x = b\) 的形式,其中 \(a\) 是向量,\(b\) 是标量。线性约束定义的可行域是凸集,这在优化问题中具有重要的意义。
▮▮▮▮⚝ 非线性约束 (Nonlinear Constraints): 约束函数是非线性的。非线性约束使得可行域的形状更加复杂,优化问题的求解难度也通常更高。
④ 凸约束 (Convex Constraints) 与 非凸约束 (Non-convex Constraints): 如果不等式约束函数 \(g_i(x)\) 是凸函数,且等式约束函数 \(h_j(x)\) 是仿射函数(既是凸函数也是凹函数),则称这些约束为凸约束。凸约束定义的可行域是凸集。非凸约束则不满足上述条件,可能导致可行域是非凸的,优化问题可能存在多个局部最优解。
约束优化问题的重要性 (Importance of Constrained Optimization):
约束优化在各个领域都有着广泛的应用,例如:
⚝ 工程设计 (Engineering Design): 结构优化、控制系统设计、电路设计等,通常需要在满足强度、稳定性、成本等约束条件下,设计出性能最优的方案。
⚝ 经济管理 (Economic Management): 资源分配、生产计划、投资组合优化等,需要在资源有限、市场需求等约束下,实现利润最大化或成本最小化。
⚝ 机器学习 (Machine Learning): 模型训练中,正则化 (Regularization) 可以看作是一种约束,限制模型复杂度,提高泛化能力。支持向量机 (Support Vector Machine, SVM) 等算法本身就基于约束优化。
⚝ 运筹学 (Operations Research): 物流优化、调度问题、路径规划等,常常需要在各种约束条件下,寻找最优的运营方案。
理解和掌握约束优化方法,对于解决实际问题至关重要。接下来的章节将深入探讨求解约束优化问题的各种方法,包括拉格朗日乘子法 (Lagrange Multiplier Method)、KKT条件 (Karush-Kuhn-Tucker Conditions)、对偶理论 (Duality Theory) 以及各种数值优化算法。
5.2 拉格朗日乘子法 (Lagrange Multiplier Method)
拉格朗日乘子法 (Lagrange Multiplier Method) 是一种求解等式约束优化 (Equality Constrained Optimization) 问题的经典方法。其核心思想是通过引入拉格朗日乘子 (Lagrange Multipliers),将一个约束优化问题转化为一个无约束优化问题,从而简化求解过程。
5.2.1 等式约束优化 (Equality Constrained Optimization)
考虑以下等式约束优化问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & h_j(x) = 0, \quad j = 1, 2, \dots, p \end{aligned} \]
其中 \(f: \mathbb{R}^n \rightarrow \mathbb{R}\) 是目标函数,\(h_j: \mathbb{R}^n \rightarrow \mathbb{R}\) 是等式约束函数。
拉格朗日函数 (Lagrangian Function):
为了求解上述问题,我们引入 拉格朗日函数 (Lagrangian Function) \(L(x, \lambda)\),其定义为:
\[ L(x, \lambda) = f(x) + \sum_{j=1}^{p} \lambda_j h_j(x) \]
其中,\(\lambda = (\lambda_1, \lambda_2, \dots, \lambda_p)^T\) 是 拉格朗日乘子向量 (Lagrange Multiplier Vector),\(\lambda_j\) 称为第 \(j\) 个约束的拉格朗日乘子。拉格朗日乘子可以理解为对应约束的影子价格 (Shadow Price),表示约束条件对目标函数最优值的影响程度。
求解方法 (Solution Method):
拉格朗日乘子法的基本思想是,如果 \(x^*\) 是原等式约束优化问题的局部最优解,那么存在拉格朗日乘子 \(\lambda^* = (\lambda_1^*, \lambda_2^*, \dots, \lambda_p^*)^T\),使得 \((x^*, \lambda^*)\) 是拉格朗日函数 \(L(x, \lambda)\) 的驻点 (Stationary Point)。也就是说,\((x^*, \lambda^*)\) 满足以下一阶必要条件 (First-Order Necessary Conditions):
\[ \nabla L(x^*, \lambda^*) = 0 \]
展开上述梯度方程,得到以下方程组:
\[ \begin{aligned} \nabla_x L(x^*, \lambda^*) = \nabla f(x^*) + \sum_{j=1}^{p} \lambda_j^* \nabla h_j(x^*) &= 0 \quad &(1) \\ \nabla_\lambda L(x^*, \lambda^*) = h(x^*) &= 0 \quad &(2) \end{aligned} \]
其中,\(\nabla_x L\) 表示拉格朗日函数对 \(x\) 的梯度,\(\nabla_\lambda L\) 表示拉格朗日函数对 \(\lambda\) 的梯度,\(h(x) = (h_1(x), h_2(x), \dots, h_p(x))^T\)。
方程组 (1) 和 (2) 构成了一个包含 \(n+p\) 个方程和 \(n+p\) 个未知数 \((x^*, \lambda^*)\) 的方程组。求解这个方程组,可以得到候选的最优解 \(x^*\) 以及对应的拉格朗日乘子 \(\lambda^*\)。
几何解释 (Geometric Interpretation):
从几何角度来看,方程 (1) 表示在最优解 \(x^*\) 处,目标函数 \(f(x)\) 的梯度 \(\nabla f(x^*)\) 可以表示为约束函数梯度 \(\nabla h_j(x^*)\) 的线性组合,即 \(\nabla f(x^*)\) 位于约束曲面在 \(x^*\) 处的法空间中。方程 (2) 则保证了解 \(x^*\) 满足所有等式约束。
二阶充分条件 (Second-Order Sufficient Conditions):
为了判断通过拉格朗日乘子法得到的驻点 \(x^*\) 是否为局部最优解,还需要考察二阶条件 (Second-Order Conditions)。对于等式约束优化问题,二阶充分条件涉及到Hessian矩阵 (Hessian Matrix) 的性质。
定义边界Hessian矩阵 (Bordered Hessian Matrix) 为:
\[ H_B(x, \lambda) = \begin{bmatrix} \nabla_{xx}^2 L(x, \lambda) & \nabla h(x) \\ \nabla h(x)^T & 0 \end{bmatrix} \]
其中,\(\nabla_{xx}^2 L(x, \lambda)\) 是拉格朗日函数 \(L(x, \lambda)\) 关于 \(x\) 的Hessian矩阵,\(\nabla h(x) = [\nabla h_1(x), \nabla h_2(x), \dots, \nabla h_p(x)]\) 是约束函数的梯度矩阵。
二阶充分条件 (Second-Order Sufficient Condition) (局部极小值):
假设 \((x^*, \lambda^*)\) 满足一阶必要条件 \(\nabla L(x^*, \lambda^*) = 0\)。如果对于所有满足 \(\nabla h(x^*)^T d = 0\) 的非零向量 \(d \in \mathbb{R}^n\),都有
\[ d^T \nabla_{xx}^2 L(x^*, \lambda^*) d > 0 \]
则 \(x^*\) 是原等式约束优化问题的局部极小值点。
二阶充分条件 (Second-Order Sufficient Condition) (局部极大值):
假设 \((x^*, \lambda^*)\) 满足一阶必要条件 \(\nabla L(x^*, \lambda^*) = 0\)。如果对于所有满足 \(\nabla h(x^*)^T d = 0\) 的非零向量 \(d \in \mathbb{R}^n\),都有
\[ d^T \nabla_{xx}^2 L(x^*, \lambda^*) d < 0 \]
则 \(x^*\) 是原等式约束优化问题的局部极大值点。
总结 (Summary):
拉格朗日乘子法求解等式约束优化问题的步骤总结如下:
① 构造拉格朗日函数 \(L(x, \lambda) = f(x) + \sum_{j=1}^{p} \lambda_j h_j(x)\)。
② 求解一阶必要条件 \(\nabla L(x, \lambda) = 0\),得到候选驻点 \((x^*, \lambda^*)\)。
③ 对于每个候选驻点 \(x^*\),验证二阶充分条件,判断其是否为局部最优解(极大值或极小值)。
④ 比较所有局部最优解的目标函数值,确定全局最优解。
案例分析 (Case Study):
例 5.1 求解以下等式约束优化问题:
\[ \begin{aligned} \min_{x, y} \quad & f(x, y) = x^2 + y^2 \\ \text{s.t.} \quad & h(x, y) = x + y - 1 = 0 \end{aligned} \]
解:
① 构造拉格朗日函数:
\[ L(x, y, \lambda) = x^2 + y^2 + \lambda (x + y - 1) \]
② 求解一阶必要条件:
\[ \begin{aligned} \frac{\partial L}{\partial x} = 2x + \lambda &= 0 \quad &(1) \\ \frac{\partial L}{\partial y} = 2y + \lambda &= 0 \quad &(2) \\ \frac{\partial L}{\partial \lambda} = x + y - 1 &= 0 \quad &(3) \end{aligned} \]
由 (1) 和 (2) 可得 \(2x = 2y\),即 \(x = y\)。代入 (3) 得 \(2x - 1 = 0\),解得 \(x = y = \frac{1}{2}\)。再代入 (1) 或 (2) 得 \(\lambda = -1\)。
因此,候选驻点为 \((x^*, y^*) = (\frac{1}{2}, \frac{1}{2})\),\(\lambda^* = -1\)。
③ 验证二阶充分条件:
\[ \nabla_{xx}^2 L(x, y, \lambda) = \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix} \]
\[ \nabla h(x, y) = \begin{bmatrix} 1 \\ 1 \end{bmatrix} \]
边界Hessian矩阵为:
\[ H_B(x, y, \lambda) = \begin{bmatrix} 2 & 0 & 1 \\ 0 & 2 & 1 \\ 1 & 1 & 0 \end{bmatrix} \]
对于约束 \(x + y - 1 = 0\),其梯度为 \(\nabla h(x, y) = [1, 1]^T\)。我们需要考虑满足 \(\nabla h(x^*, y^*)^T d = 0\) 的向量 \(d = [d_1, d_2]^T\),即 \(d_1 + d_2 = 0\),或 \(d_2 = -d_1\)。
则 \(d^T \nabla_{xx}^2 L(x^*, y^*, \lambda^*) d = [d_1, -d_1] \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix} \begin{bmatrix} d_1 \\ -d_1 \end{bmatrix} = 2d_1^2 + 2(-d_1)^2 = 4d_1^2 > 0\) (当 \(d_1 \neq 0\) 时)。
因此,\((x^*, y^*) = (\frac{1}{2}, \frac{1}{2})\) 是局部极小值点。由于目标函数是凸函数,约束是线性约束,问题是凸优化问题,局部极小值即为全局最小值。
④ 最优解为 \((x^*, y^*) = (\frac{1}{2}, \frac{1}{2})\),最小值为 \(f(\frac{1}{2}, \frac{1}{2}) = (\frac{1}{2})^2 + (\frac{1}{2})^2 = \frac{1}{2}\)。
5.2.2 不等式约束优化 (Inequality Constrained Optimization)
当约束条件包含不等式约束时,拉格朗日乘子法需要进行扩展,引入 KKT条件 (Karush-Kuhn-Tucker Conditions)。虽然KKT条件将在下一节详细介绍,但在这里我们可以先初步了解如何将拉格朗日乘子法的思想应用于不等式约束。
考虑以下不等式约束优化问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & g_i(x) \leq 0, \quad i = 1, 2, \dots, m \end{aligned} \]
广义拉格朗日函数 (Generalized Lagrangian Function):
我们定义 广义拉格朗日函数 (Generalized Lagrangian Function) \(L(x, \mu)\) 为:
\[ L(x, \mu) = f(x) + \sum_{i=1}^{m} \mu_i g_i(x) \]
其中,\(\mu = (\mu_1, \mu_2, \dots, \mu_m)^T\) 是与不等式约束相关的 拉格朗日乘子向量 (Lagrange Multiplier Vector),且要求 \(\mu_i \geq 0, \forall i\)。
约束的 فعال (Active) 与 非 فعال (Inactive) 状态 (Active and Inactive Constraints):
对于不等式约束 \(g_i(x) \leq 0\),在最优解 \(x^*\) 处,约束可能处于两种状态:
⚝ فعال约束 (Active Constraint): 如果 \(g_i(x^*) = 0\),则称第 \(i\) 个约束在 \(x^*\) 处是 فعال的,意味着该约束在最优解处起作用,限制了解的进一步优化。
⚝ 非 فعال约束 (Inactive Constraint): 如果 \(g_i(x^*) < 0\),则称第 \(i\) 个约束在 \(x^*\) 处是非 فعال的,意味着该约束在最优解处不起作用,对最优解没有直接影响。
互补松弛性 (Complementary Slackness):
对于 فعال约束,其对应的拉格朗日乘子 \(\mu_i\) 可以是非零的,表示该约束对目标函数最优值有影响。对于非 فعال约束,为了保证拉格朗日函数的最优解与原问题的最优解一致,需要引入 互补松弛性 (Complementary Slackness) 条件:
\[ \mu_i g_i(x^*) = 0, \quad i = 1, 2, \dots, m \]
这个条件意味着,如果 \(g_i(x^*) < 0\) (非 فعال约束),则必须有 \(\mu_i = 0\)。如果 \(\mu_i > 0\),则必须有 \(g_i(x^*) = 0\) ( فعال约束)。
不等式约束的拉格朗日乘子法初步思路 (Preliminary Idea for Lagrange Multiplier Method with Inequality Constraints):
求解不等式约束优化问题,可以初步考虑以下步骤:
① 构造广义拉格朗日函数 \(L(x, \mu) = f(x) + \sum_{i=1}^{m} \mu_i g_i(x)\),其中 \(\mu_i \geq 0\)。
② 求解以下条件:
▮▮▮▮⚝ 梯度条件 (Gradient Condition): \(\nabla_x L(x, \mu) = \nabla f(x) + \sum_{i=1}^{m} \mu_i \nabla g_i(x) = 0\)
▮▮▮▮⚝ 原始可行性 (Primal Feasibility): \(g_i(x) \leq 0, \quad i = 1, 2, \dots, m\)
▮▮▮▮⚝ 对偶可行性 (Dual Feasibility): \(\mu_i \geq 0, \quad i = 1, 2, \dots, m\)
▮▮▮▮⚝ 互补松弛性 (Complementary Slackness): \(\mu_i g_i(x) = 0, \quad i = 1, 2, \dots, m\)
③ 满足上述条件的解 \((x^*, \mu^*)\) 可能是局部最优解的候选点。
更系统和完整的处理不等式约束优化问题的方法是 KKT条件 (Karush-Kuhn-Tucker Conditions),将在下一节详细介绍。KKT条件是拉格朗日乘子法在不等式约束情况下的推广和完善。
5.3 KKT条件 (Karush-Kuhn-Tucker Conditions)
KKT条件 (Karush-Kuhn-Tucker Conditions) 是求解非线性规划 (Nonlinear Programming) 问题,特别是不等式约束优化 (Inequality Constrained Optimization) 问题的重要理论基础。KKT条件是拉格朗日乘子法在不等式约束情况下的推广,提供了一组最优解的必要条件 (Necessary Conditions)。在某些情况下(如凸优化问题),KKT条件也成为充分条件 (Sufficient Conditions)。
考虑以下标准形式的非线性规划问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & g_i(x) \leq 0, \quad i = 1, 2, \dots, m \\ & h_j(x) = 0, \quad j = 1, 2, \dots, p \end{aligned} \]
其中 \(f, g_i, h_j\) 都是光滑函数(至少一阶可微)。
KKT条件 (Karush-Kuhn-Tucker Conditions):
如果 \(x^*\) 是局部最优解,且某些正则性条件 (Regularity Conditions) (如 Slater条件,将在后续章节讨论) 成立,则存在拉格朗日乘子 \(\mu^* = (\mu_1^*, \mu_2^*, \dots, \mu_m^*)^T\) 和 \(\lambda^* = (\lambda_1^*, \lambda_2^*, \dots, \lambda_p^*)^T\),使得以下KKT条件成立:
① Stationarity (平稳性/梯度为零条件):
\[ \nabla f(x^*) + \sum_{i=1}^{m} \mu_i^* \nabla g_i(x^*) + \sum_{j=1}^{p} \lambda_j^* \nabla h_j(x^*) = 0 \]
② Primal Feasibility (原始可行性/约束满足条件):
\[ \begin{aligned} g_i(x^*) &\leq 0, \quad i = 1, 2, \dots, m \\ h_j(x^*) &= 0, \quad j = 1, 2, \dots, p \end{aligned} \]
③ Dual Feasibility (对偶可行性/拉格朗日乘子符号条件):
\[ \mu_i^* \geq 0, \quad i = 1, 2, \dots, m \]
④ Complementary Slackness (互补松弛性):
\[ \mu_i^* g_i(x^*) = 0, \quad i = 1, 2, \dots, m \]
KKT条件的解释 (Interpretation of KKT Conditions):
① Stationarity (平稳性): 该条件是拉格朗日函数 \(L(x, \mu, \lambda) = f(x) + \sum_{i=1}^{m} \mu_i g_i(x) + \sum_{j=1}^{p} \lambda_j h_j(x)\) 关于 \(x\) 的梯度为零,即 \(\nabla_x L(x^*, \mu^*, \lambda^*) = 0\)。它类似于无约束优化问题中的一阶必要条件,表明在最优解处,目标函数梯度与 فعال约束和等式约束的梯度的线性组合为零。
② Primal Feasibility (原始可行性): 该条件要求解 \(x^*\) 必须满足原问题的所有约束条件,即 \(x^*\) 必须位于可行域内。
③ Dual Feasibility (对偶可行性): 该条件要求不等式约束对应的拉格朗日乘子 \(\mu_i^*\) 非负。这与不等式约束 \(g_i(x) \leq 0\) 的方向有关,保证了拉格朗日函数在最优解附近的行为符合原问题的优化方向。对于最小化问题,我们希望沿着可行域内部的方向移动,因此 فعال不等式约束的梯度方向应该与目标函数梯度方向相反,从而保证 \(\mu_i^* \geq 0\)。
④ Complementary Slackness (互补松弛性): 该条件表明,对于每个不等式约束 \(g_i(x^*) \leq 0\),要么约束是 فعال的 (\(g_i(x^*) = 0\)),此时拉格朗日乘子 \(\mu_i^* \geq 0\) 可以是非零的;要么约束是非 فعال的 (\(g_i(x^*) < 0\)),此时拉格朗日乘子 \(\mu_i^*\) 必须为零 (\(\mu_i^* = 0\))。这意味着非 فعال约束对最优解没有直接影响,其对应的拉格朗日乘子为零。
求解KKT条件 (Solving KKT Conditions):
KKT条件构成了一个非线性方程组和不等式组。求解KKT条件通常需要以下步骤:
① 写出KKT条件方程组和不等式组。
② 分析互补松弛性条件 \(\mu_i^* g_i(x^*) = 0\),对于每个不等式约束,考虑两种情况:
▮▮▮▮⚝ 情况 1: \(g_i(x^*) = 0\) ( فعال约束)。此时 \(\mu_i^* \geq 0\)。
▮▮▮▮⚝ 情况 2: \(\mu_i^* = 0\) (非 فعال约束)。此时 \(g_i(x^*) \leq 0\)。
③ 根据上述情况组合,将不等式约束转化为等式或不等式,简化KKT条件。
④ 求解得到的方程组和不等式组,得到候选解 \((x^*, \mu^*, \lambda^*)\)。
⑤ 验证候选解是否满足所有KKT条件。
⑥ 对于满足KKT条件的候选解,进一步判断其是否为局部最优解(例如,通过二阶条件或在凸优化问题中,KKT条件是充分条件)。
KKT条件的应用 (Applications of KKT Conditions):
⚝ 最优性检验 (Optimality Verification): KKT条件可以用来检验一个给定的解是否可能是局部最优解。如果一个可行解不满足KKT条件,则它一定不是局部最优解。
⚝ 求解非线性规划问题 (Solving Nonlinear Programming Problems): KKT条件可以将约束优化问题转化为求解方程组和不等式组的问题,为数值优化算法的设计提供理论基础。许多优化算法,如序列二次规划法 (Sequential Quadratic Programming, SQP) 和内点法 (Interior Point Method),都基于KKT条件。
⚝ 对偶理论 (Duality Theory): KKT条件是推导对偶问题和分析对偶性质的重要工具。
案例分析 (Case Study):
例 5.2 求解以下不等式约束优化问题:
\[ \begin{aligned} \min_{x, y} \quad & f(x, y) = x^2 + y^2 \\ \text{s.t.} \quad & g(x, y) = x + y - 1 \geq 0 \end{aligned} \]
为了符合标准形式 \(g_i(x) \leq 0\),我们将约束改写为 \(-x - y + 1 \leq 0\),即 \(g(x, y) = -x - y + 1 \leq 0\)。
解:
① 写出KKT条件:
▮▮▮▮⚝ Stationarity: \(\nabla f(x, y) + \mu \nabla g(x, y) = \begin{bmatrix} 2x \\ 2y \end{bmatrix} + \mu \begin{bmatrix} -1 \\ -1 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}\)
▮▮▮▮⚝ Primal Feasibility: \(g(x, y) = -x - y + 1 \leq 0\)
▮▮▮▮⚝ Dual Feasibility: \(\mu \geq 0\)
▮▮▮▮⚝ Complementary Slackness: \(\mu g(x, y) = \mu (-x - y + 1) = 0\)
② 分析互补松弛性:
▮▮▮▮⚝ 情况 1: \(g(x, y) = -x - y + 1 = 0\) ( فعال约束)。此时 \(\mu \geq 0\)。
从 Stationarity 条件得到 \(2x - \mu = 0\) 和 \(2y - \mu = 0\),即 \(x = y = \frac{\mu}{2}\)。代入 \(g(x, y) = 0\) 得 \(-\frac{\mu}{2} - \frac{\mu}{2} + 1 = 0\),解得 \(\mu = 1\)。则 \(x = y = \frac{1}{2}\)。解为 \((x, y, \mu) = (\frac{1}{2}, \frac{1}{2}, 1)\)。
▮▮▮▮⚝ 情况 2: \(\mu = 0\) (非 فعال约束)。此时 \(g(x, y) = -x - y + 1 \leq 0\)。
从 Stationarity 条件得到 \(2x = 0\) 和 \(2y = 0\),即 \(x = y = 0\)。此时 \(g(0, 0) = 1 > 0\),不满足原始可行性条件 \(g(x, y) \leq 0\)。因此,情况 2 无解。
③ 验证候选解:
候选解为 \((x^*, y^*) = (\frac{1}{2}, \frac{1}{2})\),\(\mu^* = 1\)。
▮▮▮▮⚝ Stationarity: \(\begin{bmatrix} 2(\frac{1}{2}) \\ 2(\frac{1}{2}) \end{bmatrix} + 1 \begin{bmatrix} -1 \\ -1 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}\) (满足)
▮▮▮▮⚝ Primal Feasibility: \(g(\frac{1}{2}, \frac{1}{2}) = -\frac{1}{2} - \frac{1}{2} + 1 = 0 \leq 0\) (满足)
▮▮▮▮⚝ Dual Feasibility: \(\mu^* = 1 \geq 0\) (满足)
▮▮▮▮⚝ Complementary Slackness: \(\mu^* g(\frac{1}{2}, \frac{1}{2}) = 1 \times 0 = 0\) (满足)
所有KKT条件都满足。由于目标函数是凸函数,约束是线性约束,问题是凸优化问题,KKT条件是充分条件。因此,\((x^*, y^*) = (\frac{1}{2}, \frac{1}{2})\) 是全局最优解。
④ 最优解为 \((x^*, y^*) = (\frac{1}{2}, \frac{1}{2})\),最小值为 \(f(\frac{1}{2}, \frac{1}{2}) = (\frac{1}{2})^2 + (\frac{1}{2})^2 = \frac{1}{2}\)。
5.4 对偶理论 (Duality Theory)
对偶理论 (Duality Theory) 是优化理论的重要组成部分,它提供了一种从另一个角度审视优化问题的方法,即通过对偶问题 (Dual Problem) 来研究原始问题 (Primal Problem)。对偶理论不仅可以帮助我们更深入地理解优化问题的结构,还可以为求解优化问题提供新的思路和方法。
5.4.1 拉格朗日对偶 (Lagrange Dual)
考虑以下标准形式的原始问题 (Primal Problem):
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & g_i(x) \leq 0, \quad i = 1, 2, \dots, m \\ & h_j(x) = 0, \quad j = 1, 2, \dots, p \end{aligned} \]
拉格朗日函数 (Lagrangian Function):
定义拉格朗日函数 \(L(x, \mu, \lambda)\) 为:
\[ L(x, \mu, \lambda) = f(x) + \sum_{i=1}^{m} \mu_i g_i(x) + \sum_{j=1}^{p} \lambda_j h_j(x) \]
其中,\(\mu = (\mu_1, \mu_2, \dots, \mu_m)^T \geq 0\) 和 \(\lambda = (\lambda_1, \lambda_2, \dots, \lambda_p)^T\) 是拉格朗日乘子向量,且 \(\mu_i \geq 0\) 对应于不等式约束,\(\lambda_j\) 无符号限制对应于等式约束。
拉格朗日对偶函数 (Lagrange Dual Function):
拉格朗日对偶函数 (Lagrange Dual Function) \(q(\mu, \lambda)\) 定义为拉格朗日函数 \(L(x, \mu, \lambda)\) 关于 \(x\) 的最小值 (infimum):
\[ q(\mu, \lambda) = \inf_{x} L(x, \mu, \lambda) = \inf_{x} \left( f(x) + \sum_{i=1}^{m} \mu_i g_i(x) + \sum_{j=1}^{p} \lambda_j h_j(x) \right) \]
对偶函数 \(q(\mu, \lambda)\) 给出了原始问题最优值的一个下界 (lower bound)。对于任意满足 \(\mu \geq 0\) 的 \(\mu\) 和任意 \(\lambda\),都有 \(q(\mu, \lambda) \leq f(x^*)\),其中 \(x^*\) 是原始问题的最优解。
拉格朗日对偶问题 (Lagrange Dual Problem):
拉格朗日对偶问题 (Lagrange Dual Problem) 是最大化拉格朗日对偶函数 \(q(\mu, \lambda)\),即:
\[ \begin{aligned} \max_{\mu, \lambda} \quad & q(\mu, \lambda) \\ \text{s.t.} \quad & \mu \geq 0 \end{aligned} \]
对偶问题也是一个优化问题,其决策变量是对偶变量 \(\mu\) 和 \(\lambda\)。对偶问题的最优值记为 \(d^*\)。
弱对偶性 (Weak Duality):
弱对偶性 (Weak Duality) 是对偶理论的基本性质,它指出对偶问题的最优值总是小于或等于原始问题的最优值,即:
\[ d^* \leq f^* \]
其中 \(f^*\) 是原始问题的最优值。弱对偶性对于任何原始问题和对偶问题都成立,即使原始问题是非凸的。弱对偶性意味着对偶问题提供了一个原始问题最优值的下界。
对偶间隙 (Duality Gap):
对偶间隙 (Duality Gap) 定义为原始问题最优值与对偶问题最优值之差:
\[ \text{Duality Gap} = f^* - d^* \geq 0 \]
如果对偶间隙为零,即 \(f^* = d^*\),则称 强对偶性 (Strong Duality) 成立。强对偶性在优化理论中非常重要,因为它意味着可以通过求解对偶问题来获得原始问题的最优值。
5.4.2 强对偶性与Slater条件 (Strong Duality and Slater's Condition)
强对偶性 (Strong Duality) 指的是原始问题最优值与对偶问题最优值相等,即 \(f^* = d^*\)。强对偶性并非总是成立,但在某些条件下,例如当原始问题是凸优化问题 (Convex Optimization Problem) 且满足一定的正则性条件 (Regularity Conditions) 时,强对偶性通常成立。
凸优化问题 (Convex Optimization Problem):
一个优化问题是凸优化问题,如果:
① 目标函数 \(f(x)\) 是凸函数。
② 不等式约束函数 \(g_i(x)\) 是凸函数。
③ 等式约束函数 \(h_j(x)\) 是仿射函数 (既是凸函数也是凹函数),即 \(h_j(x) = a_j^T x - b_j\)。
④ 可行域是凸集。
对于凸优化问题,在满足某些正则性条件的情况下,强对偶性成立。
Slater条件 (Slater's Condition):
Slater条件 (Slater's Condition) 是一种常用的正则性条件,用于保证凸优化问题的强对偶性。对于凸优化问题,如果存在一个严格可行点 \(\hat{x}\),即 \(\hat{x}\) 满足:
\[ \begin{aligned} g_i(\hat{x}) &< 0, \quad i = 1, 2, \dots, m \\ h_j(\hat{x}) &= 0, \quad j = 1, 2, \dots, p \end{aligned} \]
则称 Slater条件成立。注意,Slater条件只对不等式约束起作用,等式约束必须始终满足。
强对偶定理 (Strong Duality Theorem):
对于凸优化问题,如果 Slater条件成立,则强对偶性成立,即 \(f^* = d^*\)。此外,如果原始问题存在最优解 \(x^*\),则对偶问题也存在最优解 \((\mu^*, \lambda^*)\),且 \((x^*, \mu^*, \lambda^*)\) 满足KKT条件。
强对偶性的意义 (Significance of Strong Duality):
⚝ 对偶求解 (Dual Solution): 当强对偶性成立时,可以通过求解对偶问题来获得原始问题的最优值。在某些情况下,对偶问题比原始问题更容易求解。
⚝ 灵敏度分析 (Sensitivity Analysis): 拉格朗日乘子 \(\mu_i^*\) 和 \(\lambda_j^*\) 可以解释为约束条件的影子价格,表示约束条件对最优值的影响程度。通过分析对偶变量,可以进行灵敏度分析,了解约束条件变化对最优解的影响。
⚝ 算法设计 (Algorithm Design): 对偶理论为设计优化算法提供了新的思路。例如,对偶上升法 (Dual Ascent Method) 和交替方向乘子法 (Alternating Direction Method of Multipliers, ADMM) 等算法都基于对偶理论。
总结 (Summary):
对偶理论为约束优化问题提供了一个重要的理论框架。通过构造拉格朗日对偶问题,我们可以从对偶的角度分析原始问题,并利用弱对偶性和强对偶性等性质,为求解优化问题和进行灵敏度分析提供有力的工具。对于凸优化问题,在Slater条件等正则性条件成立的情况下,强对偶性通常成立,使得对偶理论在凸优化领域具有广泛的应用价值。
6. chapter 6: 非线性规划 (Nonlinear Programming)
6.1 非线性规划问题建模 (Modeling Nonlinear Programming Problems)
非线性规划 (Nonlinear Programming, NLP) 是优化理论中的一个重要分支,它研究目标函数或约束条件中包含非线性函数的优化问题。与线性规划 (Linear Programming, LP) 不同,非线性规划能够处理更为复杂和实际的优化场景,因为现实世界中的许多问题本质上都是非线性的。
非线性规划问题的标准形式 可以表示为:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) \leq 0, \quad i = 1, 2, \ldots, m \\ & h_j(x) = 0, \quad j = 1, 2, \ldots, p \\ & x \in \mathcal{X} \subseteq \mathbb{R}^n \end{aligned} \]
其中:
① \( x \in \mathbb{R}^n \) 是 决策变量 (decision variables) 向量。
② \( f(x) \) 是 目标函数 (objective function),它是一个关于 \( x \) 的非线性函数。
③ \( c_i(x) \leq 0 \) 是 不等式约束 (inequality constraints),其中 \( c_i(x) \) 是非线性函数。
④ \( h_j(x) = 0 \) 是 等式约束 (equality constraints),其中 \( h_j(x) \) 是非线性函数。
⑤ \( \mathcal{X} \subseteq \mathbb{R}^n \) 是 可行域 (feasible region),通常是 \( \mathbb{R}^n \) 的一个子集,可以由简单的约束(如变量的上下界)定义。
与线性规划的区别:
⚝ 非线性函数:NLP 的目标函数 \( f(x) \) 和约束函数 \( c_i(x), h_j(x) \) 至少有一个是非线性函数,而 LP 中所有函数都必须是线性的。
⚝ 可行域形状:LP 的可行域是凸多面体,而 NLP 的可行域形状可以非常复杂,可能是非凸的,甚至不连通。
⚝ 局部最优与全局最优:LP 的局部最优解一定是全局最优解。NLP 由于非线性函数的存在,可能存在多个局部最优解,找到全局最优解通常更具挑战性。
非线性规划问题建模的关键步骤:
① 确定决策变量 (Identify decision variables):首先需要明确问题中哪些因素是可以控制和调整的,并将它们定义为决策变量。例如,在产品设计优化问题中,决策变量可以是产品的尺寸、材料参数等。
② 建立目标函数 (Formulate objective function):根据问题的优化目标,建立关于决策变量的函数表达式。目标函数需要能够量化优化效果,例如成本最小化、利润最大化、误差最小化等。
③ 确定约束条件 (Define constraints):分析问题中存在的各种限制条件,并将它们转化为关于决策变量的等式或不等式约束。约束条件反映了实际问题的可行性要求,例如资源限制、物理限制、性能指标限制等。
④ 确定变量的取值范围 (Determine variable bounds):根据实际情况,确定决策变量的取值范围,例如变量必须为正数、变量不能超过某个上限等。
建模示例:
例 1: 投资组合优化 (Portfolio Optimization)
假设投资者希望在多个资产中分配资金,以在一定风险水平下最大化投资回报。
⚝ 决策变量:每种资产的投资比例 \( x_i \),其中 \( i = 1, 2, \ldots, n \) 表示资产种类数。
⚝ 目标函数:最大化投资组合的预期回报 \( \mu^T x \),其中 \( \mu \) 是资产预期回报向量,\( x = [x_1, x_2, \ldots, x_n]^T \) 是投资比例向量。
⚝ 约束条件:
⚝ 投资组合风险不超过预设水平 \( \sigma_p^2 \leq \bar{\sigma}^2 \),其中 \( \sigma_p^2 = x^T \Sigma x \) 是投资组合方差,\( \Sigma \) 是资产收益的协方差矩阵,\( \bar{\sigma}^2 \) 是最大允许风险水平。
⚝ 投资比例之和为 1: \( \sum_{i=1}^n x_i = 1 \)。
⚝ 投资比例非负: \( x_i \geq 0, \quad i = 1, 2, \ldots, n \)。
该问题是一个非线性规划问题,因为目标函数是线性的,但风险约束 \( x^T \Sigma x \leq \bar{\sigma}^2 \) 是关于决策变量 \( x \) 的二次函数,属于非线性约束。
例 2: 化工过程优化 (Chemical Process Optimization)
在化工生产过程中,需要优化反应温度 \( T \) 和压力 \( P \) 以最大化某种化学品的产量 \( Y \)。产量 \( Y \) 与温度 \( T \) 和压力 \( P \) 之间存在复杂的非线性关系,例如:
\[ Y(T, P) = \frac{aT}{1 + bT^2} e^{-cP} \]
同时,温度和压力受到设备和安全条件的限制:
\[ T_{min} \leq T \leq T_{max} \]
\[ P_{min} \leq P \leq P_{max} \]
⚝ 决策变量:反应温度 \( T \) 和压力 \( P \)。
⚝ 目标函数:最大化化学品产量 \( Y(T, P) = \frac{aT}{1 + bT^2} e^{-cP} \)。
⚝ 约束条件:
⚝ 温度约束: \( T_{min} \leq T \leq T_{max} \)。
⚝ 压力约束: \( P_{min} \leq P \leq P_{max} \)。
该问题是一个非线性规划问题,因为目标函数 \( Y(T, P) \) 是关于决策变量 \( T \) 和 \( P \) 的非线性函数。
建模注意事项:
⚝ 函数光滑性 (Smoothness):优化算法的性能通常与目标函数和约束函数的光滑性有关。光滑函数(例如,连续可微函数)更容易优化。在建模时,尽量使用光滑函数,避免引入不连续或不可微的函数。
⚝ 问题规模 (Problem Size):非线性规划问题的求解难度通常随着问题规模(决策变量和约束的数量)的增加而迅速增加。在建模时,尽量简化模型,减少不必要的决策变量和约束。
⚝ 模型精度与复杂度 (Model Accuracy and Complexity):需要在模型精度和计算复杂度之间进行权衡。更精确的模型可能更符合实际情况,但也可能更难以求解。需要根据实际问题的需求选择合适的模型复杂度。
6.2 序列二次规划法 (Sequential Quadratic Programming, SQP)
序列二次规划法 (Sequential Quadratic Programming, SQP) 是一种求解约束非线性规划问题 (Constrained Nonlinear Programming Problems) 的强大迭代算法。SQP 方法的核心思想是在每次迭代中,将原非线性规划问题近似为一个二次规划 (Quadratic Programming, QP) 子问题,并通过求解该 QP 子问题来确定搜索方向和步长,从而迭代逼近最优解。SQP 方法因其高效性和鲁棒性,成为解决中小型非线性规划问题的常用方法。
SQP 方法的基本思想:
SQP 方法基于 拉格朗日函数 (Lagrangian function) 和 牛顿法 (Newton's method) 的思想。对于如下约束非线性规划问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) = 0, \quad i \in \mathcal{E} \\ & c_i(x) \leq 0, \quad i \in \mathcal{I} \end{aligned} \]
其中 \( \mathcal{E} \) 是等式约束指标集,\( \mathcal{I} \) 是不等式约束指标集。其拉格朗日函数定义为:
\[ L(x, \lambda) = f(x) + \sum_{i \in \mathcal{E} \cup \mathcal{I}} \lambda_i c_i(x) \]
其中 \( \lambda = [\lambda_i]_{i \in \mathcal{E} \cup \mathcal{I}} \) 是拉格朗日乘子向量。
SQP 方法在每次迭代 \( k \) 时,在当前迭代点 \( x_k \) 处,将目标函数 \( f(x) \) 和约束函数 \( c_i(x) \) 进行二次近似和线性近似,从而构造一个二次规划子问题。
QP 子问题的构造:
假设当前迭代点为 \( x_k \),拉格朗日乘子估计为 \( \lambda_k \)。SQP 方法构造的 QP 子问题形式如下:
\[ \begin{aligned} \min_{d} \quad & \frac{1}{2} d^T B_k d + \nabla f(x_k)^T d \\ \text{s.t.} \quad & \nabla c_i(x_k)^T d + c_i(x_k) = 0, \quad i \in \mathcal{E} \\ & \nabla c_i(x_k)^T d + c_i(x_k) \leq 0, \quad i \in \mathcal{I} \end{aligned} \]
其中:
① \( d \) 是 搜索方向 (search direction)。
② \( \nabla f(x_k) \) 是目标函数 \( f(x) \) 在 \( x_k \) 处的梯度。
③ \( \nabla c_i(x_k) \) 是约束函数 \( c_i(x) \) 在 \( x_k \) 处的梯度。
④ \( B_k \) 是拉格朗日函数 \( L(x, \lambda) \) 在 \( (x_k, \lambda_k) \) 处关于 \( x \) 的 Hessian 矩阵 (Hessian matrix) 的近似。在实际应用中,\( B_k \) 通常使用拟牛顿法 (Quasi-Newton method) 进行近似,例如 BFGS 方法。
SQP 算法的迭代步骤:
① 初始化 (Initialization):给定初始点 \( x_0 \),初始拉格朗日乘子估计 \( \lambda_0 \),初始 Hessian 矩阵近似 \( B_0 \) (通常为单位矩阵 \( I \)),以及精度阈值 \( \epsilon \)。令 \( k = 0 \)。
② 求解 QP 子问题 (Solve QP subproblem):在当前迭代点 \( x_k \) 和 Hessian 矩阵近似 \( B_k \) 下,构造并求解上述 QP 子问题,得到搜索方向 \( d_k \)。同时,QP 求解器通常会返回拉格朗日乘子的估计值 \( \lambda_{k+1} \)。
③ 线搜索 (Line search):沿搜索方向 \( d_k \) 进行线搜索,寻找合适的步长 \( \alpha_k \),使得目标函数或某种 价值函数 (merit function) 充分下降。常用的价值函数包括 \( L_1 \) 价值函数或 \( L_2 \) 价值函数。例如,\( L_1 \) 价值函数可以定义为:
\[ \Phi_1(x; \mu) = f(x) + \mu \sum_{i \in \mathcal{E}} |c_i(x)| + \mu \sum_{i \in \mathcal{I}} \max(0, c_i(x)) \]
其中 \( \mu > 0 \) 是惩罚参数。线搜索的目标是找到合适的 \( \alpha_k \) 使得 \( \Phi_1(x_k + \alpha_k d_k; \mu) < \Phi_1(x_k; \mu) \)。
④ 更新迭代点 (Update iteration point):更新迭代点 \( x_{k+1} = x_k + \alpha_k d_k \)。
⑤ 更新 Hessian 矩阵近似 (Update Hessian approximation):使用新的迭代点 \( x_{k+1} \) 和拉格朗日乘子估计 \( \lambda_{k+1} \),利用拟牛顿公式(例如 BFGS 公式)更新 Hessian 矩阵近似 \( B_{k+1} \)。
⑥ 收敛性检查 (Convergence check):检查是否满足收敛准则,例如梯度范数 \( \| \nabla f(x_{k+1}) + \sum_{i} \lambda_{i, k+1} \nabla c_i(x_{k+1}) \| \leq \epsilon \) 和约束违反度 \( \| c(x_{k+1}) \| \leq \epsilon \) 是否足够小。如果满足收敛准则,则停止迭代,输出最优解 \( x_{k+1} \)。否则,令 \( k = k + 1 \),返回步骤 ②。
SQP 方法的优点:
⚝ 收敛速度快:SQP 方法具有超线性或二次收敛速度,尤其在接近最优解时收敛速度非常快。
⚝ 鲁棒性好:SQP 方法能够有效地处理各种类型的非线性规划问题,包括目标函数和约束函数高度非线性的问题。
⚝ 理论基础完善:SQP 方法基于牛顿法和拉格朗日函数,具有坚实的理论基础。
SQP 方法的缺点:
⚝ 计算复杂度较高:每次迭代需要求解一个 QP 子问题,当问题规模较大时,QP 子问题的求解可能比较耗时。
⚝ 初始点敏感:SQP 方法的收敛性在一定程度上依赖于初始点的选择。如果初始点选择不当,可能导致算法收敛速度变慢甚至不收敛。
⚝ Hessian 矩阵近似:Hessian 矩阵的近似 \( B_k \) 的更新策略对算法性能有重要影响。不合适的更新策略可能导致算法不稳定或收敛速度下降。
SQP 方法的变种:
为了克服 SQP 方法的一些缺点,研究者提出了许多 SQP 方法的变种,例如:
⚝ Inexact SQP (ISQP):允许 QP 子问题的求解不精确,以减少每次迭代的计算量。
⚝ Feasible SQP (FSQP):在迭代过程中保持可行性,即每次迭代产生的点都满足约束条件。
⚝ Globalization strategies for SQP:采用不同的线搜索策略或信赖域策略 (Trust-Region method) 来提高算法的全局收敛性。
6.3 内点法 (Interior Point Method)
内点法 (Interior Point Method, IPM),也称为障碍法 (Barrier Method) 或路径跟踪法 (Path-Following Method),是求解约束优化问题,特别是线性规划和非线性规划问题的一类重要算法。与单纯形法 (Simplex Method) 等传统方法沿着可行域边界搜索不同,内点法在可行域内部进行搜索,通过逐步逼近可行域边界来达到最优解。内点法因其高效性和处理大规模问题的能力,在优化领域受到广泛关注。
内点法的基本思想:
内点法主要用于求解不等式约束优化问题。考虑如下不等式约束非线性规划问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) \leq 0, \quad i = 1, 2, \ldots, m \end{aligned} \]
内点法的核心思想是将不等式约束转化为目标函数中的 障碍项 (barrier term),从而将约束优化问题转化为一系列无约束优化问题。常用的障碍函数是对数障碍函数 (Logarithmic Barrier Function):
\[ B(x, \mu) = -\mu \sum_{i=1}^m \ln(-c_i(x)) \]
其中 \( \mu > 0 \) 是 障碍参数 (barrier parameter)。当 \( x \) 接近可行域边界 \( c_i(x) = 0 \) 时,\( -\ln(-c_i(x)) \rightarrow +\infty \),从而起到障碍的作用,迫使迭代点保持在可行域内部 \( c_i(x) < 0 \)。
障碍问题 (Barrier Problem):
利用对数障碍函数,原约束优化问题被转化为如下 障碍问题:
\[ \min_{x} \quad \Phi(x, \mu) = f(x) + B(x, \mu) = f(x) - \mu \sum_{i=1}^m \ln(-c_i(x)) \]
这是一个无约束优化问题。对于给定的障碍参数 \( \mu > 0 \),可以使用无约束优化算法(例如牛顿法)求解障碍问题,得到近似解 \( x(\mu) \)。
路径跟踪 (Path-Following):
内点法的关键在于如何选择和更新障碍参数 \( \mu \)。路径跟踪策略通过逐步减小 \( \mu \) 的值,使得障碍问题的解 \( x(\mu) \) 逐步逼近原约束优化问题的最优解。当 \( \mu \rightarrow 0 \) 时,障碍项的影响逐渐减小,障碍问题的解 \( x(\mu) \) 趋近于原约束优化问题的解。
中心路径 (Central Path):
对于每个 \( \mu > 0 \),障碍问题存在最优解 \( x(\mu) \)。当 \( \mu \) 从 \( \infty \) 减小到 \( 0 \) 时,最优解 \( x(\mu) \) 形成的轨迹称为 中心路径 (central path)。内点法通过跟踪中心路径来逼近最优解。
内点法算法步骤 (以原始-对偶内点法为例):
原始-对偶内点法 (Primal-Dual Interior Point Method) 是内点法中常用且高效的一种方法,它同时考虑原始变量 \( x \) 和对偶变量 \( \lambda \) (拉格朗日乘子)。
考虑如下不等式约束非线性规划问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) \leq 0, \quad i = 1, 2, \ldots, m \end{aligned} \]
其拉格朗日函数为:
\[ L(x, \lambda) = f(x) + \sum_{i=1}^m \lambda_i c_i(x) \]
KKT 条件 (Karush-Kuhn-Tucker Conditions) 为:
\[ \begin{aligned} \nabla f(x) + \sum_{i=1}^m \lambda_i \nabla c_i(x) &= 0 \\ \lambda_i c_i(x) &= 0, \quad i = 1, 2, \ldots, m \\ c_i(x) &\leq 0, \quad i = 1, 2, \ldots, m \\ \lambda_i &\geq 0, \quad i = 1, 2, \ldots, m \end{aligned} \]
原始-对偶内点法将互补松弛条件 \( \lambda_i c_i(x) = 0 \) 近似为 \( \lambda_i c_i(x) = \mu \),其中 \( \mu > 0 \) 是障碍参数。修正后的 KKT 条件为:
\[ \begin{aligned} \nabla f(x) + \sum_{i=1}^m \lambda_i \nabla c_i(x) &= 0 \\ -\lambda_i c_i(x) - \mu &= 0, \quad i = 1, 2, \ldots, m \\ c_i(x) &\leq 0, \quad i = 1, 2, \ldots, m \\ \lambda_i &\geq 0, \quad i = 1, 2, \ldots, m \end{aligned} \]
原始-对偶内点法迭代步骤:
① 初始化 (Initialization):选择初始点 \( (x_0, \lambda_0) \) 满足 \( c_i(x_0) < 0 \) 和 \( \lambda_{i, 0} > 0 \),选择初始障碍参数 \( \mu_0 > 0 \),以及精度阈值 \( \epsilon \)。令 \( k = 0 \)。
② 计算牛顿方向 (Compute Newton direction):在当前迭代点 \( (x_k, \lambda_k) \) 和障碍参数 \( \mu_k \) 下,求解牛顿方程组,得到搜索方向 \( (\Delta x_k, \Delta \lambda_k) \)。牛顿方程组可以通过对修正后的 KKT 条件进行线性化得到。
③ 线搜索 (Line search):沿搜索方向 \( (\Delta x_k, \Delta \lambda_k) \) 进行线搜索,选择步长 \( \alpha_k \in (0, 1] \),使得新的迭代点 \( (x_{k+1}, \lambda_{k+1}) = (x_k + \alpha_k \Delta x_k, \lambda_k + \alpha_k \Delta \lambda_k) \) 仍然满足 \( c_i(x_{k+1}) < 0 \) 和 \( \lambda_{i, k+1} > 0 \)。
④ 更新迭代点和障碍参数 (Update iteration point and barrier parameter):更新迭代点 \( (x_{k+1}, \lambda_{k+1}) = (x_k + \alpha_k \Delta x_k, \lambda_k + \alpha_k \Delta \lambda_k) \)。更新障碍参数 \( \mu_{k+1} = \sigma \mu_k \),其中 \( \sigma \in (0, 1) \) 是缩减因子,通常取 \( \sigma \in (0.1, 0.2) \)。
⑤ 收敛性检查 (Convergence check):检查是否满足收敛准则,例如原始残差、对偶残差和互补间隙是否足够小。如果满足收敛准则,则停止迭代,输出最优解 \( x_{k+1} \)。否则,令 \( k = k + 1 \),返回步骤 ②。
内点法的优点:
⚝ 高效性:内点法通常具有多项式时间复杂度,尤其在求解大规模线性规划问题时,效率远高于单纯形法。
⚝ 处理大规模问题:内点法适用于求解大规模优化问题,对问题规模的增长不敏感。
⚝ 鲁棒性好:内点法对初始点选择不敏感,收敛性较好。
内点法的缺点:
⚝ 实现复杂:内点法的实现相对复杂,需要处理牛顿方程组的求解、线搜索、障碍参数更新等多个环节。
⚝ 不适用于所有问题:内点法主要适用于不等式约束优化问题,对于等式约束问题需要进行一定的转化。
⚝ 可行域内部搜索:内点法在可行域内部搜索,可能无法得到精确的边界最优解,但通常可以达到工程精度要求。
内点法的应用:
内点法广泛应用于线性规划、二次规划、半定规划 (Semidefinite Programming, SDP) 和一般的非线性规划问题。在控制理论、金融工程、机器学习等领域都有重要应用。
6.4 可行方向法 (Feasible Direction Method)
可行方向法 (Feasible Direction Method),也称为梯度投影法 (Gradient Projection Method),是一类求解约束优化问题的迭代算法。可行方向法的基本思想是在每次迭代中,首先确定一个 可行方向 (feasible direction),即沿着该方向移动能够保持在可行域内,并且能够使目标函数值下降的方向;然后,沿着该可行方向进行线搜索,确定合适的步长,更新迭代点。可行方向法适用于求解具有线性或非线性约束的优化问题。
可行方向的基本概念:
对于约束优化问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & c_i(x) \leq 0, \quad i \in \mathcal{I} \\ & c_i(x) = 0, \quad i \in \mathcal{E} \end{aligned} \]
在当前可行点 \( x_k \) 处,一个向量 \( d_k \) 被称为 可行方向,如果存在 \( \bar{\alpha} > 0 \),使得对于所有 \( \alpha \in (0, \bar{\alpha}] \),点 \( x_k + \alpha d_k \) 仍然是可行的,即满足所有约束条件。
一个向量 \( d_k \) 被称为 下降方向,如果存在 \( \bar{\alpha} > 0 \),使得对于所有 \( \alpha \in (0, \bar{\alpha}] \),目标函数值 \( f(x_k + \alpha d_k) < f(x_k) \)。对于可微函数,如果 \( \nabla f(x_k)^T d_k < 0 \),则 \( d_k \) 是下降方向。
可行下降方向 (Feasible Descent Direction):
可行方向法旨在寻找 可行下降方向,即既是可行方向又是下降方向的向量。沿着可行下降方向进行搜索,可以保证迭代点在可行域内移动,并且目标函数值不断下降。
确定可行方向的方法:
确定可行方向的方法取决于约束条件的类型。对于线性约束和非线性约束,可行方向的确定方法有所不同。
1. 线性约束下的可行方向:
考虑线性约束优化问题:
\[ \begin{aligned} \min_{x} \quad & f(x) \\ \text{s.t.} \quad & A x \leq b \\ & C x = d \end{aligned} \]
在当前可行点 \( x_k \) 处,设 起作用约束集 (active set) 为 \( \mathcal{A}(x_k) = \{ i \mid a_i^T x_k = b_i \} \cup \{ j \mid c_j^T x_k = d_j \} \),其中 \( a_i^T \) 是矩阵 \( A \) 的第 \( i \) 行,\( c_j^T \) 是矩阵 \( C \) 的第 \( j \) 行。
可行方向 \( d_k \) 需要满足:
① 对于起作用的不等式约束 \( a_i^T x \leq b_i, i \in \mathcal{A}(x_k) \cap \mathcal{I} \),需要满足 \( a_i^T d_k \leq 0 \)。
② 对于起作用的等式约束 \( c_j^T x = d_j, j \in \mathcal{A}(x_k) \cap \mathcal{E} \),需要满足 \( c_j^T d_k = 0 \)。
③ 同时,为了使 \( d_k \) 是下降方向,需要满足 \( \nabla f(x_k)^T d_k < 0 \)。
梯度投影法 (Gradient Projection Method) 是一种常用的确定线性约束下可行下降方向的方法。梯度投影法的基本思想是将负梯度方向 \( -\nabla f(x_k) \) 投影到起作用约束的零空间或切空间上,得到可行方向。
2. 非线性约束下的可行方向:
对于非线性约束优化问题,可行方向的确定更为复杂。常用的方法包括 线性化可行方向法 (Linearized Feasible Direction Method) 和 Zoutendijk 可行方向法 (Zoutendijk Feasible Direction Method)。
Zoutendijk 可行方向法:
Zoutendijk 可行方向法通过求解一个线性规划子问题来确定可行方向。在当前可行点 \( x_k \) 处,线性化约束条件,构造如下线性规划子问题:
\[ \begin{aligned} \min_{d, \delta} \quad & \delta \\ \text{s.t.} \quad & \nabla f(x_k)^T d \leq \delta \\ & \nabla c_i(x_k)^T d \leq \delta, \quad i \in \mathcal{I}, c_i(x_k) \geq -\epsilon \\ & \nabla c_j(x_k)^T d = 0, \quad j \in \mathcal{E} \\ & \| d \| \leq 1 \end{aligned} \]
其中 \( \epsilon > 0 \) 是一个小的正数,用于近似起作用的不等式约束。\( \| d \| \leq 1 \) 是方向向量 \( d \) 的规范化约束,例如可以使用 \( \| d \|_\infty \leq 1 \)。求解该线性规划子问题,得到最优解 \( (d_k, \delta_k) \)。
⚝ 如果 \( \delta_k < 0 \),则 \( d_k \) 是可行下降方向。
⚝ 如果 \( \delta_k = 0 \),则需要进一步判断是否达到最优解。
可行方向法算法步骤 (基于 Zoutendijk 方法):
① 初始化 (Initialization):选择初始可行点 \( x_0 \),精度阈值 \( \epsilon \)。令 \( k = 0 \)。
② 求解可行方向子问题 (Solve feasible direction subproblem):在当前迭代点 \( x_k \) 处,构造并求解 Zoutendijk 可行方向子问题,得到可行方向 \( d_k \) 和最优值 \( \delta_k \)。
③ 可行性检查 (Feasibility check):如果 \( \delta_k \geq 0 \),则停止迭代,当前点 \( x_k \) 近似为最优解。
④ 线搜索 (Line search):沿可行方向 \( d_k \) 进行线搜索,寻找合适的步长 \( \alpha_k > 0 \),使得新的迭代点 \( x_{k+1} = x_k + \alpha_k d_k \) 仍然是可行的,并且目标函数值充分下降。
⑤ 更新迭代点 (Update iteration point):更新迭代点 \( x_{k+1} = x_k + \alpha_k d_k \)。
⑥ 收敛性检查 (Convergence check):检查是否满足收敛准则,例如 \( \| x_{k+1} - x_k \| \leq \epsilon \) 或 \( \| \nabla f(x_{k+1}) + \sum_{i} \lambda_{i, k+1} \nabla c_i(x_{k+1}) \| \leq \epsilon \)。如果满足收敛准则,则停止迭代,输出最优解 \( x_{k+1} \)。否则,令 \( k = k + 1 \),返回步骤 ②。
可行方向法的优点:
⚝ 概念直观:可行方向法的基本思想直观易懂,易于理解和实现。
⚝ 适用范围广:可行方向法可以应用于求解各种类型的约束优化问题,包括线性约束和非线性约束问题。
⚝ 迭代过程保持可行性:可行方向法在迭代过程中始终保持可行性,产生的迭代点始终在可行域内。
可行方向法的缺点:
⚝ 收敛速度较慢:可行方向法通常只具有线性收敛速度,收敛速度相对较慢。
⚝ 锯齿现象 (Zig-zagging):在可行域边界附近,可行方向法可能出现锯齿现象,导致收敛速度下降。
⚝ 可行方向子问题求解:每次迭代需要求解一个线性规划或二次规划子问题,计算量较大。
可行方向法的改进:
为了提高可行方向法的收敛速度和鲁棒性,研究者提出了许多改进方法,例如:
⚝ 梯度投影法 (Gradient Projection Method):用于线性约束优化问题,通过梯度投影确定可行方向。
⚝ 积极集策略 (Active Set Strategy):动态调整起作用约束集,提高算法效率。
⚝ 组合可行方向法:将可行方向法与其他优化方法(例如 SQP 方法)相结合,提高算法性能。
可行方向法作为一种经典的约束优化算法,在优化理论和应用中仍然具有重要意义。尽管其收敛速度相对较慢,但在某些特定问题上,可行方向法仍然是一种有效且可靠的求解方法。
7. chapter 7: 整数规划 (Integer Programming)
7.1 整数规划问题概述 (Overview of Integer Programming Problems)
整数规划 (Integer Programming, IP) 是一种数学优化 (Mathematical Optimization) 问题,要求决策变量 (Decision Variables) 取整数值。与线性规划 (Linear Programming, LP) 相比,整数规划由于整数约束的存在,使得问题的求解难度大大增加。即使目标函数 (Objective Function) 和约束条件 (Constraints) 都是线性的,整数规划问题仍然可能是NP-hard问题。
⚝ 定义 (Definition):整数规划问题是指目标函数或约束条件中,部分或全部决策变量被限制为整数值的优化问题。
⚝ 分类 (Classification):
▮▮▮▮⚝ 纯整数规划 (Pure Integer Programming):所有决策变量都必须是整数。
▮▮▮▮⚝ 混合整数规划 (Mixed Integer Programming, MIP):部分决策变量是整数,部分决策变量是连续实数。
▮▮▮▮⚝ 0-1整数规划 (Binary Integer Programming):决策变量只能取0或1两个整数值。
整数规划在实际应用中非常广泛,例如:
① 生产计划问题 (Production Planning Problem):生产数量通常必须是整数,例如生产多少台机器,多少件产品等。
② 选址问题 (Location Problem):例如工厂选址、仓库选址等,选址决策通常是选择在某个地点建或不建,是典型的0-1决策。
③ 资源分配问题 (Resource Allocation Problem):例如人员安排、设备分配等,分配的数量通常是整数。
④ 调度问题 (Scheduling Problem):例如任务调度、车辆调度等,调度的数量和时间通常是整数或离散的。
整数规划问题的数学模型的一般形式可以表示为:
\[ \begin{aligned} \min \quad & f(x) \\ \text{s.t.} \quad & g_i(x) \leq b_i, \quad i = 1, 2, \dots, m \\ & x \in \mathbb{Z}^n \quad \text{或} \quad x_j \in \mathbb{Z}, j \in I \subseteq \{1, 2, \dots, n\} \end{aligned} \]
其中,\( f(x) \) 是目标函数,\( g_i(x) \leq b_i \) 是约束条件,\( x \in \mathbb{Z}^n \) 表示所有决策变量都是整数,\( x_j \in \mathbb{Z}, j \in I \subseteq \{1, 2, \dots, n\} \) 表示部分决策变量是整数。当 \( f(x) \) 和 \( g_i(x) \) 都是线性函数时,称为线性整数规划 (Linear Integer Programming)。
求解整数规划问题比求解线性规划问题更具挑战性。单纯形法 (Simplex Method) 等高效算法可以有效地解决线性规划问题,但对于整数规划问题,直接应用单纯形法通常无法得到整数解。即使通过对线性规划的解进行简单的四舍五入,也可能导致不可行解,或者得到远离最优解的次优解。因此,需要专门的算法来求解整数规划问题。常用的求解整数规划问题的方法包括分支定界法 (Branch and Bound Method)、割平面法 (Cutting Plane Method) 和启发式算法 (Heuristic Algorithms) 等。
7.2 分支定界法 (Branch and Bound Method)
分支定界法 (Branch and Bound Method) 是一种求解整数规划问题的精确算法 (Exact Algorithm)。它的核心思想是通过分枝 (Branching) 和定界 (Bounding) 逐步缩小搜索空间,最终找到最优整数解。分支定界法是一种枚举 (Enumeration) 策略的改进,它通过有效地剪枝 (Pruning) 减少了需要搜索的节点数量,从而提高了求解效率。
基本思想 (Basic Idea):
① 分枝 (Branching):将原问题分解为若干个子问题。通常,选择一个非整数解的整数变量 \( x_j \),并创建两个新的约束条件:\( x_j \leq \lfloor x_j^* \rfloor \) 和 \( x_j \geq \lceil x_j^* \rceil \),其中 \( x_j^* \) 是当前线性规划松弛问题 (Linear Programming Relaxation) 的解中 \( x_j \) 的值。这两个新的约束条件分别添加到原问题中,形成两个新的子问题。这样,就把一个问题分解成了两个更小的子问题。
② 定界 (Bounding):对每个子问题求解其线性规划松弛问题,得到一个下界 (Lower Bound)(对于最小化问题)。线性规划松弛问题的最优解值是原整数规划问题最优解值的一个下界。
③ 剪枝 (Pruning):利用界限值 (Bound) 剪掉一些不可能包含最优解的子问题分支,从而减少搜索空间。剪枝主要基于以下三种情况:
▮▮▮▮ⓓ 界限剪枝 (Bounding Pruning):如果某个子问题的线性规划松弛问题的最优解值已经大于当前已知的最优整数解(上界 Upper Bound),则该子问题分支可以剪掉,因为它的最优整数解不可能比当前最优解更优。
▮▮▮▮ⓔ 可行性剪枝 (Feasibility Pruning):如果某个子问题的线性规划松弛问题无可行解,则该子问题分支也可以剪掉,因为它不可能包含可行解,更不可能包含最优解。
▮▮▮▮ⓕ 最优性剪枝 (Optimality Pruning):如果某个子问题的线性规划松弛问题的最优解恰好是整数解,则找到了该子问题的一个整数可行解。如果这个解比当前已知的最优整数解更优,则更新最优整数解(上界)。此时,该子问题分支也无需继续分枝,可以剪掉。
算法步骤 (Algorithm Steps):
1. 初始化 (Initialization):
⚝ 将原整数规划问题加入待处理问题列表 (List of Active Problems)。
⚝ 设置当前最优整数解 \( z^* = +\infty \) (对于最小化问题,对于最大化问题,设置为 \( -\infty \)),表示尚未找到可行整数解。
2. 迭代 (Iteration):
⚝ 如果待处理问题列表为空,则算法结束。当前最优整数解 \( z^* \) 即为最优解(如果 \( z^* \) 仍为初始值,则表示原问题无可行解)。
⚝ 从待处理问题列表中选择一个问题(选择策略可以是深度优先、广度优先或最佳优先等)。
⚝ 求解该问题的线性规划松弛问题。
⚝ 判断剪枝条件 (Pruning Conditions):
▮▮▮▮▮▮▮▮❶ 不可行 (Infeasible):如果线性规划松弛问题无可行解,则剪枝,返回步骤2。
▮▮▮▮▮▮▮▮❷ 界限超出 (Bound Exceeded):如果线性规划松弛问题的最优解值 \( \underline{z} \geq z^* \) (对于最小化问题),则剪枝,返回步骤2。
▮▮▮▮▮▮▮▮❸ 整数解 (Integer Solution):如果线性规划松弛问题的最优解 \( \bar{x} \) 是整数解,且其目标函数值 \( \bar{z} < z^* \) (对于最小化问题),则更新 \( z^* = \bar{z} \) 和最优整数解 \( x^* = \bar{x} \)。剪枝,返回步骤2。
⚝ 分枝 (Branching):如果以上剪枝条件均不满足,则选择一个非整数解的整数变量 \( x_j^* \),创建两个新的子问题:
▮▮▮▮▮▮▮▮❶ 添加约束 \( x_j \leq \lfloor x_j^* \rfloor \) 到原问题,得到子问题1。
▮▮▮▮▮▮▮▮❷ 添加约束 \( x_j \geq \lceil x_j^* \rceil \) 到原问题,得到子问题2。
将子问题1和子问题2加入待处理问题列表,返回步骤2。
分支定界法的关键要素 (Key Elements):
① 分枝策略 (Branching Strategy):如何选择分枝变量和如何创建子问题。常用的分枝变量选择策略包括选择最接近整数值的非整数变量、选择对目标函数影响最大的变量等。
② 定界方法 (Bounding Method):通常使用线性规划松弛来获得下界。更紧的下界可以提高剪枝效率,加速算法收敛。
③ 节点选择策略 (Node Selection Strategy):从待处理问题列表中选择哪个子问题进行处理。常用的策略包括深度优先搜索 (Depth-First Search, DFS)、广度优先搜索 (Breadth-First Search, BFS) 和最佳优先搜索 (Best-First Search)。
⚝ 深度优先搜索 (DFS):优先选择最新生成的子问题进行处理。优点是内存占用较少,容易找到可行解,但可能陷入局部最优,搜索时间不稳定。
⚝ 广度优先搜索 (BFS):优先选择最早生成的子问题进行处理。优点是容易找到全局最优解,但内存占用较大。
⚝ 最佳优先搜索 (Best-First Search):优先选择下界最好的子问题进行处理。优点是剪枝效率高,搜索速度快,但实现较为复杂。
分支定界法是一种通用的求解整数规划问题的框架,通过合理选择分枝策略、定界方法和节点选择策略,可以有效地求解中等规模的整数规划问题。对于大规模问题,可能需要结合其他优化技术或启发式算法来提高求解效率。
7.3 割平面法 (Cutting Plane Method)
割平面法 (Cutting Plane Method) 是另一种求解整数规划问题的精确算法。它的基本思想是通过不断添加割平面 (Cutting Plane) 约束,缩小线性规划松弛问题的可行域,使其逐步逼近整数规划问题的可行域,最终得到整数最优解。割平面法主要用于求解纯整数规划问题。
基本思想 (Basic Idea):
① 线性规划松弛 (LP Relaxation):首先,求解原整数规划问题的线性规划松弛问题,即忽略整数约束,得到一个线性规划最优解。
② 检查整数性 (Integrality Check):检查线性规划最优解是否满足整数约束。如果满足,则该解即为整数规划的最优解,算法结束。
③ 生成割平面 (Cutting Plane Generation):如果线性规划最优解不满足整数约束,则生成一个或多个割平面约束。割平面约束需要满足两个条件:
⚝ 有效性 (Validity):割平面约束必须切掉当前线性规划松弛问题的非整数最优解。
⚝ 完整性 (Integrality):割平面约束不能切掉任何整数可行解。
④ 添加割平面并重新求解 (Add Cutting Plane and Re-solve):将生成的割平面约束添加到线性规划松弛问题中,得到一个新的线性规划问题。重新求解新的线性规划问题,重复步骤②和步骤③,直到找到整数最优解或证明无整数可行解。
割平面的类型 (Types of Cutting Planes):
存在多种生成割平面的方法,常见的割平面类型包括:
① Gomory割平面 (Gomory Cut):最早提出的割平面方法,基于单纯形表 (Simplex Tableau) 的分数部分生成割平面。
② Chvátal-Gomory割平面 (Chvátal-Gomory Cut):更一般化的割平面生成方法,可以生成更强的割平面。
③ 混合整数割平面 (Mixed Integer Cut):专门用于混合整数规划问题的割平面,例如混合整数Gomory割平面、混合整数四舍五入割平面等。
④ Benders割平面 (Benders Cut):用于分解问题的割平面,常用于求解具有特殊结构的整数规划问题,例如主问题和子问题结构的问题。
Gomory割平面生成过程 (Gomory Cut Generation Process):
假设当前线性规划松弛问题的最优单纯形表如下所示,其中 \( x_B \) 是基变量 (Basic Variables),\( x_N \) 是非基变量 (Non-basic Variables):
\[ x_B = B^{-1}b - B^{-1}N x_N \]
选择一个基变量 \( x_{B_i} \) ,其值为非整数: \( (B^{-1}b)_i = \bar{b}_i \) 不是整数。则对应的方程为:
\[ x_{B_i} = \bar{b}_i - \sum_{j \in N} (B^{-1}N)_{ij} x_j = \bar{b}_i - \sum_{j \in N} \bar{a}_{ij} x_j \]
将系数 \( \bar{b}_i \) 和 \( \bar{a}_{ij} \) 分解为整数部分和分数部分:
\[ \bar{b}_i = \lfloor \bar{b}_i \rfloor + f_i, \quad \bar{a}_{ij} = \lfloor \bar{a}_{ij} \rfloor + f_{ij} \]
其中,\( 0 < f_i < 1 \) 是 \( \bar{b}_i \) 的分数部分,\( 0 \leq f_{ij} < 1 \) 是 \( \bar{a}_{ij} \) 的分数部分。由于 \( x_{B_i} \) 和 \( x_j \) (对于整数规划问题中的整数变量) 必须是整数,因此:
\[ x_{B_i} = \lfloor \bar{b}_i \rfloor + f_i - \sum_{j \in N} (\lfloor \bar{a}_{ij} \rfloor + f_{ij}) x_j \]
\[ x_{B_i} - \lfloor \bar{b}_i \rfloor + \sum_{j \in N} \lfloor \bar{a}_{ij} \rfloor x_j = f_i - \sum_{j \in N} f_{ij} x_j \]
等式左边是整数,因此等式右边也必须是整数。由于 \( 0 < f_i < 1 \) 且 \( x_j \geq 0 \) 和 \( f_{ij} \geq 0 \),为了使等式右边为整数,必须有:
\[ f_i - \sum_{j \in N} f_{ij} x_j \leq 0 \]
即 Gomory 割平面约束为:
\[ \sum_{j \in N} f_{ij} x_j \geq f_i \]
将此割平面约束添加到线性规划松弛问题中,重新求解,迭代进行,直到得到整数解。
割平面法的优缺点 (Advantages and Disadvantages):
⚝ 优点 (Advantages):
▮▮▮▮⚝ 可以保证找到整数最优解(对于纯整数规划问题)。
▮▮▮▮⚝ 割平面可以有效地缩小可行域,加速收敛。
⚝ 缺点 (Disadvantages):
▮▮▮▮⚝ 算法收敛速度可能较慢,尤其是在接近最优解时。
▮▮▮▮⚝ 生成的割平面数量可能很多,导致线性规划问题规模不断增大。
▮▮▮▮⚝ 数值稳定性问题,由于不断添加约束,可能导致数值计算误差累积。
▮▮▮▮⚝ 对于混合整数规划问题,割平面法的应用相对复杂。
割平面法通常与分支定界法结合使用,形成分支切割法 (Branch and Cut Method)。分支切割法在分支定界的过程中,不仅进行分枝和定界,还在每个节点上生成割平面,进一步缩小可行域,提高剪枝效率,是求解复杂整数规划问题的有效方法。
7.4 0-1整数规划 (0-1 Integer Programming)
0-1整数规划 (0-1 Integer Programming) 是一类特殊的整数规划问题,其中所有决策变量 \( x_j \) 只能取0或1两个整数值,即 \( x_j \in \{0, 1\} \)。0-1整数规划在实际应用中非常广泛,可以用来描述各种选择 (Selection) 或决策 (Decision) 问题,例如:
① 投资决策 (Investment Decision):投资项目是否选择投资,可以用0-1变量表示(1表示投资,0表示不投资)。
② 设备选择 (Equipment Selection):选择哪些设备购买,可以用0-1变量表示(1表示购买,0表示不购买)。
③ 任务分配 (Task Assignment):将任务分配给哪些人或机器,可以用0-1变量表示(1表示分配,0表示不分配)。
④ 逻辑约束 (Logical Constraints):可以用0-1变量和线性不等式来表示各种逻辑关系,例如“或 (OR)”、“与 (AND)”、“非 (NOT)”、“蕴含 (Implication)”等。
0-1整数规划的数学模型 (Mathematical Model of 0-1 Integer Programming):
\[ \begin{aligned} \min \quad & c^T x \\ \text{s.t.} \quad & Ax \leq b \\ & x_j \in \{0, 1\}, \quad j = 1, 2, \dots, n \end{aligned} \]
其中,\( x = (x_1, x_2, \dots, x_n)^T \) 是决策变量向量,\( c = (c_1, c_2, \dots, c_n)^T \) 是成本向量,\( A \) 是约束矩阵,\( b \) 是右端向量。
求解0-1整数规划的方法 (Methods for Solving 0-1 Integer Programming):
由于0-1整数规划是整数规划的特殊形式,因此可以使用求解一般整数规划的方法,例如分支定界法和割平面法。此外,由于其特殊的结构,还可以使用一些专门针对0-1整数规划的方法:
① 枚举法 (Enumeration Method):由于每个变量只有两种取值(0或1),因此可以枚举所有可能的解组合。对于 \( n \) 个变量,共有 \( 2^n \) 种可能的解组合。当 \( n \) 较小时,枚举法是可行的。但当 \( n \) 较大时,计算量会呈指数级增长,变得不可行。
② 隐枚举法 (Implicit Enumeration Method):是对枚举法的改进,通过一些判断条件,隐式地枚举部分解空间,从而减少搜索量。分支定界法可以看作是一种隐枚举法。
③ 回溯法 (Backtracking Method):深度优先搜索策略,尝试给变量赋值,如果发现当前赋值导致不可行或目标函数值变差,则回溯到上一步,尝试其他赋值。
④ 动态规划法 (Dynamic Programming Method):对于某些具有特殊结构的0-1整数规划问题,可以使用动态规划方法求解,例如背包问题 (Knapsack Problem) 可以用动态规划高效求解。
⑤ 启发式算法 (Heuristic Algorithms):例如遗传算法 (Genetic Algorithm)、模拟退火算法 (Simulated Annealing) 等,可以在合理的时间内找到近似最优解,但不保证找到全局最优解。
0-1整数规划的应用案例 (Application Examples of 0-1 Integer Programming):
① 背包问题 (Knapsack Problem):给定一组物品,每种物品有重量和价值,背包有容量限制。选择哪些物品放入背包,使得背包内物品的总重量不超过容量限制,且总价值最大。可以用0-1整数规划建模。
② 指派问题 (Assignment Problem):将 \( n \) 项任务分配给 \( n \) 个人,每个人完成每项任务的成本不同。如何分配任务,使得总成本最小。可以用0-1整数规划建模。
③ 旅行商问题 (Traveling Salesperson Problem, TSP):旅行商需要访问 \( n \) 个城市,每个城市只访问一次,最后回到出发城市。城市之间距离已知。如何规划旅行路线,使得总旅行距离最短。可以用0-1整数规划建模。
④ 固定费用问题 (Fixed Charge Problem):生产某种产品,除了单位生产成本外,还需要支付固定的开工费用。如何确定生产方案,使得总成本最小。可以用0-1整数规划建模。
0-1整数规划是整数规划中非常重要且应用广泛的分支。掌握0-1整数规划的建模方法和求解算法,对于解决实际决策问题具有重要意义。
8. chapter 8: 动态规划 (Dynamic Programming)
8.1 动态规划基本原理 (Basic Principles of Dynamic Programming)
动态规划 (Dynamic Programming, DP) 是一种通过将复杂问题分解为更小的重叠子问题来解决优化问题的算法思想和方法。它广泛应用于各个领域,如计算机科学、运筹学、经济学和生物信息学等。动态规划的核心在于最优子结构 (Optimal Substructure) 和 重叠子问题 (Overlapping Subproblems) 这两个基本原理。
8.1.1 最优子结构 (Optimal Substructure)
最优子结构是指一个问题的最优解包含其子问题的最优解。换句话说,如果我们能够找到子问题的最优解,那么就可以利用这些子问题的最优解来构造原问题的最优解。
① 定义: 如果一个问题的最优解可以通过其子问题的最优解构造得到,那么我们就称这个问题具有最优子结构性质。
② 理解: 最优子结构是动态规划方法能够适用的前提条件。当我们求解一个问题时,如果发现该问题可以分解为若干个子问题,并且这些子问题的最优解能够帮助我们得到原问题的最优解,那么就可以考虑使用动态规划方法。
③ 示例: 考虑一个经典的例子:最短路径问题 (Shortest Path Problem)。假设我们需要找到从城市 A 到城市 B 的最短路径。如果城市 A 到城市 B 的最短路径经过城市 C,那么城市 A 到城市 C 的路径也必须是城市 A 到城市 C 的最短路径。这就是最优子结构性质的体现。
⚝ 证明最优子结构: 证明一个问题是否具有最优子结构性质,通常需要采用反证法。假设原问题的最优解不包含子问题的最优解,那么我们可以通过替换子问题的解来构造一个更优的原问题解,从而与原问题解的最优性矛盾。
8.1.2 重叠子问题 (Overlapping Subproblems)
重叠子问题是指在解决问题的过程中,相同的子问题会被多次重复计算。动态规划通过记忆化 (Memoization) 或 制表 (Tabulation) 的方法,将子问题的解存储起来,避免重复计算,从而提高算法的效率。
① 定义: 如果一个问题在分解为子问题时,存在相同的子问题被多次求解的情况,那么我们就称这个问题具有重叠子问题性质。
② 理解: 重叠子问题是动态规划方法能够提高效率的关键所在。如果子问题之间没有重叠,那么分解为子问题求解的策略可能退化为简单的分治法 (Divide and Conquer)。动态规划通过存储子问题的解,避免了对相同子问题的重复计算,从而显著提升了算法的效率,尤其是在子问题重叠非常严重的情况下。
③ 示例: 考虑计算 斐波那契数列 (Fibonacci Sequence) 的例子。计算 \(F(n)\) 需要计算 \(F(n-1)\) 和 \(F(n-2)\),而计算 \(F(n-1)\) 又需要计算 \(F(n-2)\) 和 \(F(n-3)\)。可以看到,\(F(n-2)\) 被重复计算了多次。使用动态规划,我们可以将已经计算过的斐波那契数存储起来,当需要再次计算时直接查表,避免重复计算。
⚝ 记忆化 vs. 制表:
▮▮▮▮ⓐ 记忆化 (Memoization) (自顶向下 (Top-down)):采用递归的方式,在递归的过程中,将已经计算过的子问题的解存储在缓存中(例如,哈希表或数组)。当再次遇到相同的子问题时,直接从缓存中读取结果,避免重复计算。
▮▮▮▮ⓑ 制表 (Tabulation) (自底向上 (Bottom-up)):采用迭代的方式,按照子问题规模从小到大的顺序,先计算规模较小的子问题的解,并将结果存储在表格中(例如,数组)。然后,利用已求解的子问题的解来计算规模较大的子问题的解,直到计算出原问题的解。
⚝ 选择记忆化还是制表: 在大多数情况下,记忆化和制表都可以用来解决具有重叠子问题性质的问题。选择哪种方法通常取决于个人偏好和问题的具体特点。
▮▮▮▮ⓐ 记忆化: 更符合人的思维习惯,易于理解和实现,特别是在子问题空间不是全部需要计算的情况下,记忆化可能更高效。
▮▮▮▮ⓑ 制表: 通常具有更好的空间和时间效率,因为迭代的方式避免了递归调用的开销,并且可以更精确地控制计算的顺序和存储空间的使用。在子问题空间需要全部计算的情况下,制表通常是更好的选择。
8.2 动态规划建模 (Modeling with Dynamic Programming)
使用动态规划解决问题,关键在于建立正确的状态转移方程 (State Transition Equation) 和确定边界条件 (Boundary Conditions)。动态规划建模的一般步骤如下:
① 定义状态 (Define States):
状态是描述问题在某一阶段的特征,并且能够唯一确定子问题的解的变量。状态的选择直接影响到状态转移方程的建立和问题的求解效率。
⚝ 状态表示: 状态通常用一个或多个变量来表示,例如 \(dp[i]\), \(dp[i][j]\), \(dp[i][j][k]\) 等。状态的维度取决于问题的复杂程度和需要记录的信息量。
⚝ 状态设计原则: 状态应该能够完整地描述子问题,并且能够通过状态之间的转移得到原问题的解。状态的设计应该尽可能简洁,避免冗余信息,以提高算法的效率。
② 确定状态转移方程 (Determine State Transition Equation):
状态转移方程描述了状态之间是如何转移的,即如何从一个或多个子问题的解得到当前问题的解。状态转移方程是动态规划的核心,它体现了最优子结构性质。
⚝ 递推关系: 状态转移方程通常是一个递推关系式,例如 \(dp[i] = f(dp[i-1], dp[i-2], ...)\) 或 \(dp[i][j] = g(dp[i-1][j], dp[i][j-1], dp[i-1][j-1], ...)\)。
⚝ 最优性原理: 状态转移方程的建立要基于最优性原理,即当前状态的最优解可以通过其子状态的最优解推导得到。
③ 确定边界条件 (Determine Boundary Conditions):
边界条件是动态规划的初始状态,即最小规模子问题的解。边界条件是递推的起点,没有边界条件,递推就无法开始。
⚝ 初始值: 边界条件通常是一些可以直接确定的初始值,例如 \(dp[0] = initial\_value\), \(dp[1] = initial\_value\) 等。
⚝ 基本情况: 边界条件对应于问题最简单的情况,其解可以直接给出,无需进一步分解。
④ 确定计算顺序 (Determine Calculation Order):
计算顺序决定了我们如何填充状态表格。对于制表法,我们需要按照子问题规模从小到大的顺序计算状态值,确保在计算当前状态时,其依赖的子状态已经计算完毕。
⚝ 自底向上: 制表法通常采用自底向上的计算顺序,先计算小规模子问题的解,再逐步计算大规模子问题的解。
⚝ 拓扑排序: 在某些情况下,状态之间的依赖关系可能比较复杂,需要根据状态之间的依赖关系进行拓扑排序,确定计算顺序。
⑤ 求解目标 (Solve the Goal):
根据问题的要求,确定最终需要求解的状态。通常,最终的解会存储在状态表格的某个位置,例如 \(dp[n]\) 或 \(dp[m][n]\)。
⚝ 最终状态: 最终状态对应于原问题的解,通常是状态表格的最后一个或某几个状态。
⚝ 回溯路径: 在某些情况下,除了求解最优值,还需要找到最优解的具体方案,这时需要记录状态转移的路径,通过回溯路径来得到最优解。
8.3 经典动态规划问题 (Classic Dynamic Programming Problems)
动态规划在解决各种优化问题中都有广泛的应用。以下介绍两个经典的动态规划问题:背包问题和最长公共子序列问题。
8.3.1 背包问题 (Knapsack Problem)
背包问题 (Knapsack Problem) 是一类经典的组合优化问题。它有很多变种,最常见的是 0-1背包问题 (0-1 Knapsack Problem) 和 完全背包问题 (Unbounded Knapsack Problem)。
a. 0-1背包问题 (0-1 Knapsack Problem)
① 问题描述: 给定 \(n\) 个物品,每个物品 \(i\) 都有一个重量 \(w_i\) 和一个价值 \(v_i\)。有一个容量为 \(C\) 的背包。要求选择一些物品装入背包,使得装入背包的物品总重量不超过背包容量 \(C\),且总价值最大。每个物品要么装入背包,要么不装入,不能只装入一部分,因此称为 0-1背包问题。
② 建模:
⚝ 状态定义: 定义 \(dp[i][j]\) 为考虑前 \(i\) 个物品,背包容量为 \(j\) 时,可以获得的最大总价值。其中 \(i\) 的取值范围为 \(0\) 到 \(n\),\(j\) 的取值范围为 \(0\) 到 \(C\)。
⚝ 状态转移方程: 对于第 \(i\) 个物品,我们有两种选择:
▮▮▮▮ⓐ 不装入背包: 此时,最大总价值与考虑前 \(i-1\) 个物品,背包容量为 \(j\) 时相同,即 \(dp[i][j] = dp[i-1][j]\)。
▮▮▮▮ⓑ 装入背包: 前提是第 \(i\) 个物品的重量 \(w_i\) 不超过当前背包容量 \(j\)。此时,最大总价值为考虑前 \(i-1\) 个物品,背包容量为 \(j-w_i\) 时的最大总价值加上第 \(i\) 个物品的价值 \(v_i\),即 \(dp[i][j] = dp[i-1][j-w_i] + v_i\)。
综合两种情况,状态转移方程为:
\[ dp[i][j] = \begin{cases} dp[i-1][j] & \text{if } j < w_i \\ \max(dp[i-1][j], dp[i-1][j-w_i] + v_i) & \text{if } j \ge w_i \end{cases} \]
⚝ 边界条件: 当没有物品可以选 (i=0) 或者背包容量为 0 (j=0) 时,最大总价值为 0,即 \(dp[0][j] = 0\) 和 \(dp[i][0] = 0\)。
⚝ 计算顺序: 按照物品编号 \(i\) 从 1 到 \(n\) 递增,背包容量 \(j\) 从 0 到 \(C\) 递增的顺序计算 \(dp[i][j]\)。
⚝ 求解目标: 最终的解为 \(dp[n][C]\),即考虑所有 \(n\) 个物品,背包容量为 \(C\) 时,可以获得的最大总价值。
③ 代码示例 (Python, 制表法):
1
def knapsack_01(weights, values, capacity):
2
n = len(weights)
3
dp = [[0] * (capacity + 1) for _ in range(n + 1)]
4
5
for i in range(1, n + 1):
6
for j in range(capacity + 1):
7
if j < weights[i-1]:
8
dp[i][j] = dp[i-1][j]
9
else:
10
dp[i][j] = max(dp[i-1][j], dp[i-1][j - weights[i-1]] + values[i-1])
11
12
return dp[n][capacity]
13
14
# 示例
15
weights = [1, 3, 4, 5]
16
values = [1, 4, 5, 7]
17
capacity = 7
18
max_value = knapsack_01(weights, values, capacity)
19
print(f"0-1背包问题的最大价值为: {max_value}") # 输出: 9
b. 完全背包问题 (Unbounded Knapsack Problem)
① 问题描述: 与 0-1背包问题类似,给定 \(n\) 种物品,每种物品 \(i\) 都有一个重量 \(w_i\) 和一个价值 \(v_i\)。有一个容量为 \(C\) 的背包。不同之处在于,每种物品可以无限次选择装入背包,即每种物品可以选择 0 个、1 个、2 个... 直到背包容量允许。要求在总重量不超过背包容量 \(C\) 的前提下,使得装入背包的物品总价值最大。
② 建模:
⚝ 状态定义: 与 0-1背包问题类似,定义 \(dp[i][j]\) 为考虑前 \(i\) 种物品,背包容量为 \(j\) 时,可以获得的最大总价值。
⚝ 状态转移方程: 对于第 \(i\) 种物品,我们可以选择装入 0 个、1 个、2 个... 直到背包容量不允许。
▮▮▮▮ⓐ 不装入第 \(i\) 种物品: 此时,最大总价值与考虑前 \(i-1\) 种物品,背包容量为 \(j\) 时相同,即 \(dp[i][j] = dp[i-1][j]\)。
▮▮▮▮ⓑ 装入至少一个第 \(i\) 种物品: 前提是第 \(i\) 种物品的重量 \(w_i\) 不超过当前背包容量 \(j\)。如果装入一个第 \(i\) 种物品,那么背包剩余容量为 \(j-w_i\),我们可以继续选择物品装入剩余容量为 \(j-w_i\) 的背包,此时的最大总价值为 \(dp[i][j-w_i] + v_i\)。注意这里是 \(dp[i][j-w_i]\) 而不是 \(dp[i-1][j-w_i]\),因为每种物品可以无限次选择。
综合两种情况,状态转移方程为:
\[ dp[i][j] = \begin{cases} dp[i-1][j] & \text{if } j < w_i \\ \max(dp[i-1][j], dp[i][j-w_i] + v_i) & \text{if } j \ge w_i \end{cases} \]
⚝ 边界条件: 与 0-1背包问题相同,\(dp[0][j] = 0\) 和 \(dp[i][0] = 0\)。
⚝ 计算顺序: 与 0-1背包问题类似,按照物品种类 \(i\) 从 1 到 \(n\) 递增,背包容量 \(j\) 从 0 到 \(C\) 递增的顺序计算 \(dp[i][j]\)。
⚝ 求解目标: 最终的解为 \(dp[n][C]\)。
③ 代码示例 (Python, 制表法):
1
def unbounded_knapsack(weights, values, capacity):
2
n = len(weights)
3
dp = [[0] * (capacity + 1) for _ in range(n + 1)]
4
5
for i in range(1, n + 1):
6
for j in range(capacity + 1):
7
if j < weights[i-1]:
8
dp[i][j] = dp[i-1][j]
9
else:
10
dp[i][j] = max(dp[i-1][j], dp[i][j - weights[i-1]] + values[i-1]) # 注意这里是 dp[i][j-weights[i-1]]
11
12
return dp[n][capacity]
13
14
# 示例
15
weights = [1, 3, 4, 5]
16
values = [1, 4, 5, 7]
17
capacity = 7
18
max_value = unbounded_knapsack(weights, values, capacity)
19
print(f"完全背包问题的最大价值为: {max_value}") # 输出: 10
8.3.2 最长公共子序列 (Longest Common Subsequence, LCS)
最长公共子序列 (Longest Common Subsequence, LCS) 问题也是一个经典的动态规划问题。
① 问题描述: 给定两个字符串 \(s_1\) 和 \(s_2\),求它们的最长公共子序列的长度。子序列不必是连续的,但子序列中的字符在原字符串中的相对顺序必须保持不变。例如,字符串 "ace" 是 "abcde" 的一个子序列,但不是 "aec" 的子序列。
② 建模:
⚝ 状态定义: 定义 \(dp[i][j]\) 为字符串 \(s_1\) 的前 \(i\) 个字符和字符串 \(s_2\) 的前 \(j\) 个字符的最长公共子序列的长度。其中 \(i\) 的取值范围为 \(0\) 到 \(len(s_1)\),\(j\) 的取值范围为 \(0\) 到 \(len(s_2)\)。
⚝ 状态转移方程: 考虑 \(s_1\) 的第 \(i\) 个字符 \(s_1[i]\) 和 \(s_2\) 的第 \(j\) 个字符 \(s_2[j]\) (假设字符串索引从 1 开始)。
▮▮▮▮ⓐ 如果 \(s_1[i] == s_2[j]\): 则这两个字符可以作为公共子序列的最后一个字符,此时最长公共子序列的长度为 \(s_1\) 的前 \(i-1\) 个字符和 \(s_2\) 的前 \(j-1\) 个字符的最长公共子序列的长度加 1,即 \(dp[i][j] = dp[i-1][j-1] + 1\)。
▮▮▮▮ⓑ 如果 \(s_1[i] \ne s_2[j]\): 则这两个字符不能同时作为公共子序列的最后一个字符,此时最长公共子序列的长度为以下两种情况的最大值:
▮▮▮▮▮▮▮▮❸ \(s_1\) 的前 \(i-1\) 个字符和 \(s_2\) 的前 \(j\) 个字符的最长公共子序列的长度,即 \(dp[i-1][j]\)。
▮▮▮▮▮▮▮▮❹ \(s_1\) 的前 \(i\) 个字符和 \(s_2\) 的前 \(j-1\) 个字符的最长公共子序列的长度,即 \(dp[i][j-1]\)。
综合两种情况,状态转移方程为:
\[ dp[i][j] = \begin{cases} dp[i-1][j-1] + 1 & \text{if } s_1[i] == s_2[j] \\ \max(dp[i-1][j], dp[i][j-1]) & \text{if } s_1[i] \ne s_2[j] \end{cases} \]
⚝ 边界条件: 当其中一个字符串为空时,最长公共子序列的长度为 0,即 \(dp[i][0] = 0\) 和 \(dp[0][j] = 0\)。
⚝ 计算顺序: 按照字符串 \(s_1\) 的索引 \(i\) 从 1 到 \(len(s_1)\) 递增,字符串 \(s_2\) 的索引 \(j\) 从 1 到 \(len(s_2)\) 递增的顺序计算 \(dp[i][j]\)。
⚝ 求解目标: 最终的解为 \(dp[len(s_1)][len(s_2)]\),即字符串 \(s_1\) 和 \(s_2\) 的最长公共子序列的长度。
③ 代码示例 (Python, 制表法):
1
def longest_common_subsequence(s1, s2):
2
m, n = len(s1), len(s2)
3
dp = [[0] * (n + 1) for _ in range(m + 1)]
4
5
for i in range(1, m + 1):
6
for j in range(1, n + 1):
7
if s1[i-1] == s2[j-1]: # 注意字符串索引从 0 开始,dp 索引从 1 开始
8
dp[i][j] = dp[i-1][j-1] + 1
9
else:
10
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
11
12
return dp[m][n]
13
14
# 示例
15
s1 = "ABCDGH"
16
s2 = "AEDFHR"
17
lcs_length = longest_common_subsequence(s1, s2)
18
print(f"最长公共子序列的长度为: {lcs_length}") # 输出: 3 (ADH)
动态规划是一种强大的算法设计技巧,它通过巧妙地分解问题和存储子问题的解,有效地解决了许多优化问题。理解动态规划的基本原理和建模方法,对于解决实际问题具有重要的意义。
9. chapter 9: 随机优化 (Stochastic Optimization)
9.1 随机优化问题概述 (Overview of Stochastic Optimization Problems)
在确定性优化 (Deterministic Optimization) 问题中,我们通常假设问题的参数,如目标函数 (objective function) 和约束条件 (constraints) 都是已知且固定的。然而,在现实世界的许多问题中,不确定性 (uncertainty) 是一个不可避免的因素。这种不确定性可能来源于数据测量误差、随机扰动、模型的不精确性,或是环境的随机变化等。当优化问题中涉及到随机因素时,我们就进入了随机优化 (Stochastic Optimization) 的领域。
随机优化 旨在解决含有随机性因素的优化问题。与传统的确定性优化不同,随机优化需要处理目标函数或约束条件中存在的随机变量。这些随机变量通常服从某种概率分布,使得优化问题的解不再是一个固定的值,而可能是一个关于随机变量的函数,或者是一个期望值意义下的最优解。
为什么需要随机优化?
① 现实世界问题的随机性: 许多实际问题本质上是随机的。例如,在金融领域,投资组合优化需要考虑市场收益率的随机波动;在机器学习领域,训练数据通常带有噪声,模型的性能需要在未知的测试数据上进行优化;在工程设计中,材料属性、载荷条件等可能存在随机性。
② 处理不确定性: 随机优化提供了一种处理不确定性的框架。通过将不确定性建模为随机变量,我们可以设计出对不确定性具有鲁棒性 (robustness) 的优化策略。
③ 算法效率: 在某些情况下,即使问题本身是确定性的,引入随机性也可能提高优化算法的效率。例如,随机梯度下降法 (Stochastic Gradient Descent, SGD) 在大规模机器学习问题中表现出色,其核心思想就是利用随机抽样的梯度信息来加速优化过程。
随机优化问题的分类
随机优化问题可以根据随机性的来源和处理方式进行分类。常见的分类方式包括:
① 随机规划 (Stochastic Programming): 这类问题中,随机性主要体现在问题的参数上,例如目标函数的系数、约束条件的右端项等是随机变量。随机规划的目标通常是找到一个决策,使得目标函数在随机参数下的期望值最优,或者满足约束条件的概率达到一定水平。
② 鲁棒优化 (Robust Optimization): 鲁棒优化关注的是在参数不确定性集合 (uncertainty set) 内,找到一个对所有可能参数取值都表现良好的解。鲁棒优化旨在找到一个“最坏情况”下的最优解,从而保证解的鲁棒性。
③ 机会约束规划 (Chance-Constrained Programming): 机会约束规划允许约束条件在一定程度上被违反,但要求违反的概率不超过预先设定的水平。这种方法在处理软约束 (soft constraints) 或允许一定风险的场景中非常有用。
④ 随机近似 (Stochastic Approximation): 随机近似主要用于解决目标函数或梯度难以精确计算,但可以通过随机抽样或模拟进行估计的问题。随机梯度下降法就是一种典型的随机近似方法。
随机优化问题的基本要素
与确定性优化问题类似,随机优化问题也包含以下基本要素:
⚝ 决策变量 (Decision Variables): 决策变量 \( \mathbf{x} \) 是我们需要优化的变量,可以是连续的、离散的或混合类型的。在随机优化中,决策变量可以是确定性的,也可以是随机的(例如,在两阶段随机规划中,第一阶段的决策是确定性的,第二阶段的决策依赖于随机事件)。
⚝ 目标函数 (Objective Function): 目标函数 \( F(\mathbf{x}, \boldsymbol{\xi}) \) 是关于决策变量 \( \mathbf{x} \) 和随机变量 \( \boldsymbol{\xi} \) 的函数。在随机优化中,我们通常不直接优化 \( F(\mathbf{x}, \boldsymbol{\xi}) \),而是优化其某种统计量,例如期望值 \( \mathbb{E}_{\boldsymbol{\xi}}[F(\mathbf{x}, \boldsymbol{\xi})] \)。
⚝ 约束条件 (Constraints): 约束条件可以是确定性的,也可以是随机的。随机约束条件通常表示为概率约束,例如 \( \mathbb{P}[G(\mathbf{x}, \boldsymbol{\xi}) \leq 0] \geq 1 - \alpha \),其中 \( \alpha \) 是一个给定的概率水平。
案例分析: 投资组合优化 (Portfolio Optimization)
假设一个投资者想要在 \( n \) 种资产中分配资金,以最大化投资组合的收益,同时控制风险。每种资产的收益率是随机的,记为 \( \boldsymbol{r} = [r_1, r_2, \dots, r_n]^T \),服从一定的概率分布。投资者需要决定每种资产的投资比例 \( \mathbf{x} = [x_1, x_2, \dots, x_n]^T \),其中 \( x_i \) 表示投资于第 \( i \) 种资产的资金比例,且 \( \sum_{i=1}^{n} x_i = 1 \) 和 \( x_i \geq 0 \)。
投资组合的收益为 \( R(\mathbf{x}, \boldsymbol{r}) = \mathbf{x}^T \boldsymbol{r} \)。投资组合的风险可以用收益率的方差来衡量,即 \( \text{Var}(R(\mathbf{x}, \boldsymbol{r})) = \mathbf{x}^T \boldsymbol{\Sigma} \mathbf{x} \),其中 \( \boldsymbol{\Sigma} \) 是收益率的协方差矩阵。
一个典型的随机优化问题是均值-方差模型 (Mean-Variance Model),其目标是在给定风险水平下最大化期望收益,或者在给定期望收益水平下最小化风险。例如,最小化风险的均值-方差模型可以表示为:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{x}^T \boldsymbol{\Sigma} \mathbf{x} \\ \text{s.t.} \quad & \mathbb{E}[R(\mathbf{x}, \boldsymbol{r})] = \mathbb{E}[\mathbf{x}^T \boldsymbol{r}] = \boldsymbol{\mu}^T \mathbf{x} \geq R_0 \\ & \sum_{i=1}^{n} x_i = 1 \\ & x_i \geq 0, \quad i = 1, 2, \dots, n \end{aligned} \]
其中 \( \boldsymbol{\mu} = \mathbb{E}[\boldsymbol{r}] \) 是资产收益率的期望向量,\( R_0 \) 是期望收益的最低水平。这是一个典型的随机优化问题,因为目标函数和约束条件都涉及到随机变量的统计量。
本章内容概要
本章将深入探讨几种常用的随机优化算法,包括:
⚝ 随机梯度下降法 (Stochastic Gradient Descent, SGD): 一种在机器学习和大规模优化中广泛应用的迭代算法,通过随机抽样梯度信息来逼近真实梯度,从而加速优化过程。
⚝ 模拟退火算法 (Simulated Annealing): 一种全局优化算法,通过模拟物理退火过程来搜索全局最优解,特别适用于解决非凸和多峰的优化问题。
⚝ 遗传算法 (Genetic Algorithm): 一种基于生物进化理论的启发式搜索算法,通过模拟自然选择、交叉和变异等过程来寻找最优解,适用于解决复杂和非线性优化问题。
通过学习本章内容,读者将能够理解随机优化问题的基本概念和特点,掌握几种重要的随机优化算法,并能够应用这些算法解决实际问题。
9.2 随机梯度下降法 (Stochastic Gradient Descent, SGD)
随机梯度下降法 (Stochastic Gradient Descent, SGD) 是一种迭代优化算法,广泛应用于机器学习和大规模优化问题中。与传统的梯度下降法 (Gradient Descent, GD) 相比,SGD 的核心思想是在每次迭代中,随机选择一个或少量样本来计算梯度,而不是使用全部样本。这种方法大大降低了每次迭代的计算成本,尤其是在处理大规模数据集时,SGD 的效率优势非常明显。
背景: 梯度下降法 (Gradient Descent, GD)
在深入了解 SGD 之前,我们先回顾一下梯度下降法。对于一个无约束优化问题:
\[ \min_{\mathbf{x}} f(\mathbf{x}) \]
其中 \( f(\mathbf{x}) \) 是可微的目标函数。梯度下降法的迭代公式为:
\[ \mathbf{x}_{k+1} = \mathbf{x}_{k} - \eta \nabla f(\mathbf{x}_{k}) \]
其中 \( \mathbf{x}_{k} \) 是第 \( k \) 次迭代的解,\( \eta > 0 \) 是学习率 (learning rate) 或步长 (step size),\( \nabla f(\mathbf{x}_{k}) \) 是目标函数在 \( \mathbf{x}_{k} \) 处的梯度。梯度下降法的基本思想是沿着负梯度方向迭代更新解,逐步逼近局部最优解。
随机梯度下降法 (SGD) 的基本思想
在机器学习中,我们经常需要最小化一个经验风险函数 (empirical risk function),其形式通常为:
\[ f(\mathbf{x}) = \frac{1}{N} \sum_{i=1}^{N} L(\mathbf{x}, \mathbf{z}_i) \]
其中 \( \mathbf{x} \) 是模型参数,\( \mathbf{z}_i \) 是第 \( i \) 个样本数据,\( L(\mathbf{x}, \mathbf{z}_i) \) 是第 \( i \) 个样本的损失函数 (loss function),\( N \) 是样本总数。
在梯度下降法中,每次迭代需要计算全部样本的梯度:
\[ \nabla f(\mathbf{x}) = \frac{1}{N} \sum_{i=1}^{N} \nabla L(\mathbf{x}, \mathbf{z}_i) \]
当样本数量 \( N \) 非常大时,计算全部样本的梯度会非常耗时。SGD 的核心思想是用单个样本或少量样本的梯度来近似代替全部样本的梯度。
SGD 的迭代公式
在 SGD 中,每次迭代随机选择一个样本 \( \mathbf{z}_{i_k} \) (或一个 mini-batch 的样本集合 \( \mathcal{B}_k \)),并使用该样本 (或 mini-batch) 的梯度来更新参数:
⚝ 单样本 SGD (Vanilla SGD): 每次迭代随机选择一个样本 \( \mathbf{z}_{i_k} \),更新公式为:
\[ \mathbf{x}_{k+1} = \mathbf{x}_{k} - \eta_k \nabla L(\mathbf{x}_{k}, \mathbf{z}_{i_k}) \]
⚝ Mini-batch SGD: 每次迭代随机选择一个 mini-batch 的样本集合 \( \mathcal{B}_k \),更新公式为:
\[ \mathbf{x}_{k+1} = \mathbf{x}_{k} - \eta_k \frac{1}{|\mathcal{B}_k|} \sum_{\mathbf{z}_i \in \mathcal{B}_k} \nabla L(\mathbf{x}_{k}, \mathbf{z}_i) \]
其中 \( \eta_k \) 是第 \( k \) 次迭代的学习率,可以是常数,也可以随着迭代次数衰减。Mini-batch SGD 是实际应用中最常用的形式,它在梯度估计的准确性和计算效率之间取得了较好的平衡。
SGD 的算法步骤 (Mini-batch SGD)
① 初始化参数 \( \mathbf{x}_0 \) 和学习率 \( \{\eta_k\}_{k=0}^\infty \)。
② 迭代 \( k = 0, 1, 2, \dots \):
▮▮▮▮ⓒ 从训练数据集中随机抽取一个 mini-batch \( \mathcal{B}_k \)。
▮▮▮▮ⓓ 计算 mini-batch 的平均梯度: \( \mathbf{g}_k = \frac{1}{|\mathcal{B}_k|} \sum_{\mathbf{z}_i \in \mathcal{B}_k} \nabla L(\mathbf{x}_{k}, \mathbf{z}_i) \)。
▮▮▮▮ⓔ 更新参数: \( \mathbf{x}_{k+1} = \mathbf{x}_{k} - \eta_k \mathbf{g}_k \)。
⑥ 停止准则: 达到最大迭代次数或梯度足够小等。
SGD 的特点和优势
① 计算效率高: 每次迭代只需计算少量样本的梯度,大大降低了计算成本,尤其适用于大规模数据集。
② 收敛速度快: 在早期迭代阶段,SGD 可以快速接近最优解,因为每次迭代都朝着一个(随机的)下降方向前进。
③ 逃离局部最优解: 由于梯度的随机性,SGD 具有一定的随机扰动,有助于跳出局部最优解,找到更好的全局最优解 (尤其在非凸优化问题中)。
SGD 的挑战和改进
① 梯度噪声: 使用随机样本梯度代替真实梯度会引入噪声,导致迭代过程不稳定,收敛路径震荡。
② 学习率选择: 学习率的选择对 SGD 的性能至关重要。过大的学习率可能导致震荡甚至发散,过小的学习率可能导致收敛速度过慢。
③ 收敛性: SGD 的收敛性分析比 GD 更复杂。在非凸问题中,SGD 通常收敛到局部最优解或鞍点附近。
为了克服 SGD 的挑战,研究者提出了许多改进的 SGD 算法,例如:
⚝ 动量 SGD (Momentum SGD): 引入动量项,累积之前的梯度信息,平滑梯度更新,加速收敛并减少震荡。
⚝ 自适应学习率算法 (Adaptive Learning Rate Algorithms): 如 AdaGrad, RMSProp, Adam 等,根据参数的历史梯度信息自适应地调整每个参数的学习率,提高算法的鲁棒性和收敛速度。Adam 算法是目前最流行的自适应学习率算法之一。
案例分析: 线性回归 (Linear Regression) 的 SGD 求解
考虑线性回归问题,目标是找到参数 \( \mathbf{w} \) 和 \( b \),使得模型 \( y = \mathbf{w}^T \mathbf{x} + b \) 能够最好地拟合训练数据 \( \{(\mathbf{x}_i, y_i)\}_{i=1}^N \)。常用的损失函数是均方误差 (Mean Squared Error, MSE):
\[ L(\mathbf{w}, b) = \frac{1}{2N} \sum_{i=1}^{N} (\mathbf{w}^T \mathbf{x}_i + b - y_i)^2 \]
使用 SGD 求解线性回归问题,每次迭代随机选择一个样本 \( (\mathbf{x}_i, y_i) \),计算损失函数关于 \( \mathbf{w} \) 和 \( b \) 的梯度:
\[ \begin{aligned} \nabla_{\mathbf{w}} L_i(\mathbf{w}, b) &= (\mathbf{w}^T \mathbf{x}_i + b - y_i) \mathbf{x}_i \\ \nabla_{b} L_i(\mathbf{w}, b) &= (\mathbf{w}^T \mathbf{x}_i + b - y_i) \end{aligned} \]
其中 \( L_i(\mathbf{w}, b) = \frac{1}{2} (\mathbf{w}^T \mathbf{x}_i + b - y_i)^2 \) 是第 \( i \) 个样本的损失函数。
SGD 的更新公式为:
\[ \begin{aligned} \mathbf{w}_{k+1} &= \mathbf{w}_{k} - \eta_k (\mathbf{w}_k^T \mathbf{x}_i + b_k - y_i) \mathbf{x}_i \\ b_{k+1} &= b_{k} - \eta_k (\mathbf{w}_k^T \mathbf{x}_i + b_k - y_i) \end{aligned} \]
通过迭代更新 \( \mathbf{w} \) 和 \( b \),SGD 可以逐步找到线性回归模型的最优参数。
总结
随机梯度下降法 (SGD) 是一种高效且广泛应用的优化算法,特别适用于大规模机器学习问题。它通过随机抽样梯度信息来加速优化过程,并在非凸优化问题中具有一定的优势。虽然 SGD 存在梯度噪声和学习率选择等挑战,但通过各种改进算法,如动量 SGD 和自适应学习率算法,SGD 已经成为训练深度学习模型的主流优化方法。
9.3 模拟退火算法 (Simulated Annealing)
模拟退火算法 (Simulated Annealing, SA) 是一种概率型全局优化算法,其灵感来源于物理学中金属退火的过程。在金属退火过程中,金属先被加热到高温,然后缓慢冷却,原子会逐渐趋于有序排列,最终达到能量最低的稳定状态。模拟退火算法正是借鉴了这种缓慢降温的过程,通过引入Metropolis准则,使其在搜索过程中既能接受更优解,也能以一定的概率接受较差解,从而跳出局部最优解,搜索到全局最优解。
物理退火过程
在物理退火过程中,系统的能量 \( E \) 与温度 \( T \) 有关。在高温下,原子热运动剧烈,系统处于高能状态,容易跳出局部能量极小值。随着温度缓慢降低,原子运动逐渐减缓,系统趋于能量更低的状态。最终,在低温下,系统达到能量最低的基态 (ground state)。
模拟退火算法的基本思想
模拟退火算法模拟了物理退火的过程,将优化问题的目标函数值类比为物理系统的能量 \( E \),将优化问题的解类比为物理系统的状态。算法通过控制一个温度参数 \( T \),模拟降温过程,在搜索过程中以一定的概率接受较差解,从而避免陷入局部最优解。
Metropolis准则
Metropolis准则 是模拟退火算法的核心。它决定了在当前温度 \( T \) 下,是否接受一个新的解 \( \mathbf{x}_{\text{new}} \) 来替代当前解 \( \mathbf{x}_{\text{current}} \)。假设目标函数为 \( f(\mathbf{x}) \) (最小化问题)。
① 计算能量差 (目标函数值差): \( \Delta E = f(\mathbf{x}_{\text{new}}) - f(\mathbf{x}_{\text{current}}) \)。
② 如果 \( \Delta E \leq 0 \),即新解更优或相等,则接受新解,令 \( \mathbf{x}_{\text{current}} = \mathbf{x}_{\text{new}} \)。
③ 如果 \( \Delta E > 0 \),即新解较差,则以一定的概率 \( p = \exp(-\frac{\Delta E}{T}) \) 接受新解,否则拒绝新解,保持当前解 \( \mathbf{x}_{\text{current}} \)。
概率 \( p = \exp(-\frac{\Delta E}{T}) \) 的特点:
⚝ 当 \( \Delta E \) 较小时,接受较差解的概率较高。
⚝ 当 \( \Delta E \) 较大时,接受较差解的概率较低。
⚝ 当温度 \( T \) 较高时,接受较差解的概率较高,算法更倾向于探索 (exploration)。
⚝ 当温度 \( T \) 较低时,接受较差解的概率较低,算法更倾向于利用 (exploitation) 已找到的较好解。
⚝ 当 \( T \rightarrow 0 \) 时,\( p \rightarrow 0 \),算法退化为贪心算法,只接受更优解。
模拟退火算法的步骤
① 初始化: 设定初始温度 \( T_0 \) (高温),初始解 \( \mathbf{x}_0 \),终止温度 \( T_{\text{min}} \) (低温),降温速率 \( \alpha \) (例如 \( 0.95 \)),迭代次数 \( L \) (每个温度下的迭代次数)。
② 令当前温度 \( T = T_0 \),当前解 \( \mathbf{x}_{\text{current}} = \mathbf{x}_0 \),最优解 \( \mathbf{x}_{\text{best}} = \mathbf{x}_0 \)。
③ While \( T > T_{\text{min}} \):
▮▮▮▮ⓓ For \( i = 1 \) to \( L \):
▮▮▮▮▮▮▮▮❺ 在当前解 \( \mathbf{x}_{\text{current}} \) 的邻域内随机生成一个新解 \( \mathbf{x}_{\text{new}} \)。
▮▮▮▮▮▮▮▮❻ 计算能量差 \( \Delta E = f(\mathbf{x}_{\text{new}}) - f(\mathbf{x}_{\text{current}}) \)。
▮▮▮▮▮▮▮▮❼ 如果 \( \Delta E \leq 0 \) 或以概率 \( p = \exp(-\frac{\Delta E}{T}) \) 接受 \( \mathbf{x}_{\text{new}} \),则更新当前解 \( \mathbf{x}_{\text{current}} = \mathbf{x}_{\text{new}} \)。
▮▮▮▮▮▮▮▮❽ 如果 \( f(\mathbf{x}_{\text{current}}) < f(\mathbf{x}_{\text{best}}) \),则更新最优解 \( \mathbf{x}_{\text{best}} = \mathbf{x}_{\text{current}} \)。
▮▮▮▮ⓘ 降温: \( T = \alpha T \)。
⑩ 返回最优解 \( \mathbf{x}_{\text{best}} \)。
模拟退火算法的关键参数
⚝ 初始温度 \( T_0 \): 初始温度应足够高,以保证算法在搜索初期具有较强的全局搜索能力。
⚝ 终止温度 \( T_{\text{min}} \): 终止温度应足够低,以保证算法在搜索后期能够稳定收敛到最优解附近。
⚝ 降温速率 \( \alpha \): 降温速率决定了温度下降的速度。缓慢降温 ( \( \alpha \) 接近 1) 有利于找到全局最优解,但计算时间较长;快速降温 ( \( \alpha \) 较小) 计算时间较短,但可能陷入局部最优解。
⚝ 迭代次数 \( L \): 每个温度下的迭代次数 \( L \) 应该足够大,以保证在每个温度下算法能够充分搜索平衡状态。
⚝ 邻域生成函数 (Neighborhood Generation Function): 邻域生成函数决定了如何从当前解生成新解。邻域的定义应根据具体问题而定,通常需要保证能够遍历整个搜索空间。
模拟退火算法的特点和优势
① 全局优化能力: 通过 Metropolis 准则,模拟退火算法能够以一定的概率接受较差解,从而跳出局部最优解,具有较强的全局搜索能力。
② 鲁棒性强: 模拟退火算法对初始解的依赖性较弱,鲁棒性较好。
③ 通用性强: 模拟退火算法对目标函数和约束条件的形式没有特殊要求,可以应用于各种类型的优化问题,包括连续优化、离散优化、组合优化等。
模拟退火算法的局限性
① 参数敏感性: 模拟退火算法的性能受参数 (如初始温度、降温速率、迭代次数等) 的影响较大,参数选择需要一定的经验或实验调整。
② 计算时间长: 为了保证全局优化能力,模拟退火算法通常需要较长的计算时间,尤其是在搜索空间较大或目标函数计算复杂的情况下。
③ 收敛速度慢: 与一些局部优化算法相比,模拟退火算法的收敛速度较慢。
案例分析: 旅行商问题 (Traveling Salesperson Problem, TSP)
旅行商问题 (TSP) 是一个经典的组合优化问题:给定 \( n \) 个城市和城市之间的距离,寻找一条访问每个城市恰好一次并返回起点的最短路径。
可以使用模拟退火算法求解 TSP 问题。
⚝ 解的表示: 用城市访问顺序的排列表示一个解,例如 \( [1, 3, 2, 4, \dots, n] \) 表示依次访问城市 1, 3, 2, 4, ..., n,最后返回城市 1。
⚝ 目标函数: 路径的总长度,即所有相邻城市之间距离之和。
⚝ 邻域生成函数: 可以采用多种邻域生成方式,例如:
▮▮▮▮⚝ 交换 (Swap): 随机选择路径中的两个城市,交换它们的位置。
▮▮▮▮⚝ 逆转 (Reverse): 随机选择路径中的一段子路径,将其顺序逆转。
▮▮▮▮⚝ 插入 (Insert): 随机选择路径中的一个城市,将其插入到路径中的另一个位置。
使用模拟退火算法求解 TSP 问题的步骤:
① 初始化: 随机生成一个初始路径,设定初始温度、终止温度、降温速率、迭代次数等参数。
② 迭代: 在每个温度下,多次生成新路径 (例如使用交换、逆转或插入操作),根据 Metropolis 准则决定是否接受新路径。
③ 降温: 降低温度。
④ 终止: 当温度达到终止温度时,算法结束,返回当前最优路径。
总结
模拟退火算法 (SA) 是一种强大的全局优化算法,通过模拟物理退火过程,使其具有跳出局部最优解的能力。它在解决复杂优化问题,特别是全局优化问题时非常有效。虽然模拟退火算法存在参数敏感性和计算时间较长等局限性,但通过合理的参数设置和改进策略,它仍然是一种重要的优化工具。
9.4 遗传算法 (Genetic Algorithm)
遗传算法 (Genetic Algorithm, GA) 是一种启发式搜索算法,其灵感来源于生物进化理论中的自然选择和遗传机制。遗传算法模拟了生物进化过程中的选择 (selection)、交叉 (crossover) 和变异 (mutation) 等操作,通过迭代进化,逐步搜索到最优解。遗传算法特别适用于解决复杂、非线性、多峰和搜索空间巨大的优化问题。
生物进化理论
生物进化理论认为,生物种群通过自然选择和遗传变异不断进化,适应环境。在自然选择中,适应环境的个体更容易生存和繁殖,其基因 (gene) 会被遗传到下一代。遗传变异 (如基因突变和基因重组) 会产生新的基因组合,为进化提供多样性。
遗传算法的基本思想
遗传算法模拟了生物进化过程,将优化问题的解类比为生物的个体 (individual) 或染色体 (chromosome),将目标函数值类比为个体的适应度 (fitness)。算法通过维护一个种群 (population),模拟自然选择、交叉和变异等操作,使得种群中的个体不断进化,适应度不断提高,最终搜索到最优解。
遗传算法的基本要素
① 编码 (Encoding): 将优化问题的解表示为染色体的形式。常用的编码方式包括二进制编码、实数编码、符号编码等。编码方式的选择取决于具体问题。
② 种群初始化 (Population Initialization): 随机生成一定数量的个体,构成初始种群。种群规模 (population size) 是一个重要的参数,影响算法的搜索能力和计算效率。
③ 适应度函数 (Fitness Function): 评价个体适应度的函数,通常直接使用目标函数或对其进行适当变换。适应度函数值越高 (或越低,取决于优化目标),个体越优秀。
④ 选择 (Selection): 根据个体的适应度,选择一部分优秀个体作为父代,用于产生下一代。常用的选择方法包括轮盘赌选择 (roulette wheel selection)、锦标赛选择 (tournament selection)、排序选择 (rank selection) 等。
⑤ 交叉 (Crossover): 将选出的父代个体进行交叉操作,产生新的后代个体。交叉操作模拟了基因重组,有助于产生新的基因组合。常用的交叉方法包括单点交叉 (single-point crossover)、多点交叉 (multi-point crossover)、均匀交叉 (uniform crossover) 等。
⑥ 变异 (Mutation): 对后代个体进行变异操作,引入随机性,增加种群多样性,防止早熟收敛到局部最优解。常用的变异方法包括位点变异 (bit-flip mutation)、实值变异 (real-value mutation) 等。
⑦ 终止条件 (Termination Condition): 设定算法的终止条件,例如达到最大迭代次数、找到满足要求的解、种群适应度趋于稳定等。
遗传算法的步骤
① 初始化: 随机生成初始种群。
② 评估: 计算种群中每个个体的适应度。
③ 选择: 根据适应度选择父代个体。
④ 交叉: 对父代个体进行交叉操作,产生后代个体。
⑤ 变异: 对后代个体进行变异操作。
⑥ 更新种群: 用后代个体替换部分或全部父代个体,形成新的种群。
⑦ 终止判断: 判断是否满足终止条件,如果满足则算法结束,否则返回步骤 ②。
遗传算法的关键操作
⚝ 选择 (Selection): 选择操作模拟了自然选择,选择适应度高的个体作为父代,保证优秀基因能够遗传到下一代。轮盘赌选择是一种常用的选择方法,个体被选择的概率与其适应度成正比。
⚝ 交叉 (Crossover): 交叉操作模拟了基因重组,将父代个体的基因片段进行交换,产生新的基因组合,有助于搜索新的解空间。交叉概率 (crossover rate) 是一个重要的参数,控制交叉操作的频率。
⚝ 变异 (Mutation): 变异操作模拟了基因突变,随机改变个体染色体上的某些基因,引入新的基因,增加种群多样性,防止算法过早收敛到局部最优解。变异概率 (mutation rate) 是另一个重要的参数,控制变异操作的频率。
遗传算法的特点和优势
① 全局搜索能力: 遗传算法通过种群搜索和遗传操作,具有较强的全局搜索能力,能够搜索到全局最优解或近似全局最优解。
② 鲁棒性强: 遗传算法对初始解的依赖性较弱,鲁棒性较好。
③ 并行性: 遗传算法本质上是一种并行搜索算法,可以同时搜索解空间中的多个区域,易于并行化实现。
④ 通用性强: 遗传算法对目标函数和约束条件的形式没有特殊要求,可以应用于各种类型的优化问题,包括连续优化、离散优化、组合优化等。
遗传算法的局限性
① 参数敏感性: 遗传算法的性能受参数 (如种群规模、交叉概率、变异概率等) 的影响较大,参数选择需要一定的经验或实验调整。
② 早熟收敛: 如果种群多样性过早丧失,遗传算法可能陷入局部最优解,出现早熟收敛现象。
③ 计算时间长: 对于复杂问题,遗传算法可能需要较长的计算时间才能找到满意的解。
案例分析: 函数优化 (Function Optimization)
考虑求解一个复杂的多峰函数的最值问题,例如 Rastrigin函数:
\[ f(\mathbf{x}) = 10d + \sum_{i=1}^{d} [x_i^2 - 10 \cos(2\pi x_i)] \]
其中 \( \mathbf{x} = [x_1, x_2, \dots, x_d]^T \),\( d \) 是维度。Rastrigin函数是一个典型的多峰函数,具有大量的局部最小值,全局最小值在 \( \mathbf{x} = [0, 0, \dots, 0]^T \),函数值为 0。
可以使用遗传算法求解 Rastrigin 函数的最小值。
⚝ 编码: 使用实数编码,将解 \( \mathbf{x} \) 直接编码为染色体。
⚝ 种群初始化: 在给定的搜索空间内随机生成初始种群。
⚝ 适应度函数: 可以直接使用目标函数 \( f(\mathbf{x}) \) 的相反数作为适应度函数,即 \( \text{fitness}(\mathbf{x}) = -f(\mathbf{x}) \) (最大化适应度)。
⚝ 选择: 使用轮盘赌选择或锦标赛选择。
⚝ 交叉: 使用实数交叉,例如线性交叉或算术交叉。
⚝ 变异: 使用实值变异,例如高斯变异或均匀变异。
通过迭代遗传操作,遗传算法可以逐步搜索到 Rastrigin 函数的全局最小值附近。
总结
遗传算法 (GA) 是一种强大的启发式搜索算法,通过模拟生物进化过程,使其具有全局搜索能力和鲁棒性。它在解决复杂优化问题,特别是全局优化问题时非常有效。虽然遗传算法存在参数敏感性和早熟收敛等局限性,但通过合理的参数设置和改进策略,它仍然是一种重要的优化工具,并在许多领域得到了广泛应用。
10. chapter 10: 多目标优化 (Multi-objective Optimization)
10.1 多目标优化问题概述 (Overview of Multi-objective Optimization Problems)
在之前的章节中,我们主要探讨了单目标优化问题,即优化问题中只有一个需要最大化或最小化的目标函数。然而,在现实世界的许多复杂问题中,我们往往需要同时优化多个目标,这些目标之间可能相互冲突,无法找到一个解能够同时使所有目标都达到最优。这类问题被称为多目标优化问题 (Multi-objective Optimization Problems),也称为多准则优化 (Multi-criteria Optimization) 或向量优化 (Vector Optimization) 问题。
与单目标优化问题不同,多目标优化问题的解通常不是唯一的全局最优解,而是一组Pareto最优解 (Pareto Optimal Solutions) 或非支配解 (Non-dominated Solutions)。这是因为在多目标优化中,改进一个目标函数的值往往会牺牲其他目标函数的值。因此,多目标优化的目标是找到一组解,这些解在不同的目标之间达到某种平衡,为决策者提供多样化的选择。
多目标优化问题在各个领域都有广泛的应用,例如:
① 工程设计 (Engineering Design):设计汽车时,需要同时考虑燃油效率、安全性、成本和性能等多个目标。提高燃油效率可能会增加成本或降低性能,因此需要在这些目标之间进行权衡。
② 金融投资 (Financial Investment):投资者通常希望最大化收益并最小化风险。高收益的投资往往伴随着高风险,反之亦然。多目标优化可以帮助投资者在收益和风险之间找到最佳平衡点。
③ 资源分配 (Resource Allocation):在资源有限的情况下,如何将资源分配给不同的项目或部门,以最大化整体效益,同时满足公平性、效率性等多个目标,是一个典型的多目标优化问题。
④ 机器学习 (Machine Learning):在训练机器学习模型时,我们可能需要同时优化模型的准确率和泛化能力,或者在模型大小和性能之间进行权衡。例如,在神经网络的训练中,我们可能希望同时最小化训练误差和模型复杂度。
多目标优化问题的一般数学形式可以表示为:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{F}(\mathbf{x}) = [f_1(\mathbf{x}), f_2(\mathbf{x}), \ldots, f_m(\mathbf{x})]^T \\ \text{s.t.} \quad & \mathbf{x} \in \mathcal{X} \end{aligned} \]
其中,
⚝ \(\mathbf{x} = [x_1, x_2, \ldots, x_n]^T\) 是 决策变量 (decision variables) 向量。
⚝ \(\mathbf{F}(\mathbf{x}) = [f_1(\mathbf{x}), f_2(\mathbf{x}), \ldots, f_m(\mathbf{x})]^T\) 是 目标函数向量 (objective function vector),包含 \(m\) 个目标函数 \(f_1(\mathbf{x}), f_2(\mathbf{x}), \ldots, f_m(\mathbf{x})\)。
⚝ \(\mathcal{X}\) 是 可行域 (feasible region),由约束条件定义。
与单目标优化不同,这里的目标函数 \(\mathbf{F}(\mathbf{x})\) 是一个向量,我们需要同时优化这个向量的多个分量。由于目标之间可能存在冲突,我们通常无法找到一个 \(\mathbf{x}\) 使得所有 \(f_i(\mathbf{x})\) 同时达到最小值。因此,我们需要引入 Pareto最优 的概念来描述多目标优化问题的解。
10.2 Pareto最优 (Pareto Optimality)
在多目标优化中,Pareto最优 (Pareto Optimality) 是一个核心概念,用于描述解的质量和解之间的优劣关系。为了理解 Pareto 最优,首先需要定义 Pareto支配 (Pareto Dominance) 的概念。
定义 10.1 (Pareto支配):
对于两个可行解 \(\mathbf{x}_1, \mathbf{x}_2 \in \mathcal{X}\),如果满足以下两个条件,则称 \(\mathbf{x}_1\) Pareto支配 \(\mathbf{x}_2\) (或称 \(\mathbf{x}_1\) 优于 \(\mathbf{x}_2\)),记作 \(\mathbf{F}(\mathbf{x}_1) \preceq \mathbf{F}(\mathbf{x}_2)\):
① 对于所有目标函数 \(i = 1, 2, \ldots, m\),都有 \(f_i(\mathbf{x}_1) \leq f_i(\mathbf{x}_2)\) (最小化问题)。
② 至少存在一个目标函数 \(j \in \{1, 2, \ldots, m\}\),使得 \(f_j(\mathbf{x}_1) < f_j(\mathbf{x}_2)\)。
简单来说,\(\mathbf{x}_1\) Pareto支配 \(\mathbf{x}_2\) 意味着 \(\mathbf{x}_1\) 在所有目标函数上都不比 \(\mathbf{x}_2\) 差,并且至少在一个目标函数上严格优于 \(\mathbf{x}_2\)。
基于 Pareto 支配的概念,我们可以定义 Pareto最优解 (Pareto Optimal Solution)。
定义 10.2 (Pareto最优解):
一个可行解 \(\mathbf{x}^* \in \mathcal{X}\) 被称为 Pareto最优解 (或 非支配解),如果不存在任何其他可行解 \(\mathbf{x} \in \mathcal{X}\) 使得 \(\mathbf{F}(\mathbf{x})\) Pareto支配 \(\mathbf{F}(\mathbf{x}^*)\)。
换句话说,Pareto最优解是指在可行域内,无法在不牺牲至少一个目标函数的情况下,改进任何其他目标函数的解。Pareto最优解构成 Pareto最优集 (Pareto Optimal Set),将 Pareto 最优解的目标函数值映射到目标空间,就形成了 Pareto前沿 (Pareto Front)。
Pareto前沿 (Pareto Front) 是多目标优化问题解集的重要组成部分,它直观地展示了目标函数之间的权衡关系。在二维目标空间中,Pareto前沿通常是一条曲线;在高维目标空间中,则是一个超曲面。
示例 10.1: 考虑一个简单的双目标优化问题:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{F}(\mathbf{x}) = [f_1(x), f_2(x)]^T = [x, \frac{1}{x}]^T \\ \text{s.t.} \quad & x \in [0.1, 10] \end{aligned} \]
其中,\(f_1(x) = x\) 和 \(f_2(x) = \frac{1}{x}\) 是两个相互冲突的目标函数。当 \(x\) 增大时,\(f_1(x)\) 减小,但 \(f_2(x)\) 增大;反之亦然。
为了找到 Pareto 最优解,我们考虑两个解 \(x_1\) 和 \(x_2\)。假设 \(x_1 < x_2\)。
⚝ 对于 \(x_1\),目标函数值为 \(\mathbf{F}(x_1) = [x_1, \frac{1}{x_1}]^T\)。
⚝ 对于 \(x_2\),目标函数值为 \(\mathbf{F}(x_2) = [x_2, \frac{1}{x_2}]^T\)。
由于 \(x_1 < x_2\),所以 \(f_1(x_1) = x_1 < x_2 = f_1(x_2)\)。但是 \(f_2(x_1) = \frac{1}{x_1} > \frac{1}{x_2} = f_2(x_2)\)。因此,\(x_1\) 和 \(x_2\) 之间不存在 Pareto 支配关系。
实际上,对于这个例子,可行域内的所有解 \(x \in [0.1, 10]\) 都是 Pareto 最优解。因为对于任意一个解 \(x^*\),如果尝试减小 \(f_1(x)\),就需要减小 \(x\),但这会导致 \(f_2(x)\) 增大;如果尝试减小 \(f_2(x)\),就需要增大 \(x\),但这会导致 \(f_1(x)\) 增大。因此,无法在不牺牲另一个目标函数的情况下改进任何一个目标函数。
这个例子的 Pareto 前沿可以用参数方程表示为 \((x, \frac{1}{x})\),其中 \(x \in [0.1, 10]\)。在目标空间中,Pareto 前沿是一条双曲线的一部分。
理解 Pareto 最优的概念是解决多目标优化问题的关键。多目标优化算法的目标通常是找到尽可能接近真实 Pareto 前沿,且分布均匀、多样性好的 Pareto 最优解集。
10.3 多目标优化方法 (Multi-objective Optimization Methods)
由于多目标优化问题的解是一组 Pareto 最优解,而不是单一的最优解,因此需要专门的方法来求解这类问题。多目标优化方法大致可以分为以下几类:
① 传统方法 (Classical Methods):将多目标问题转化为单目标问题进行求解,例如加权和法、ε-约束法等。
② 进化算法 (Evolutionary Algorithms):基于生物进化思想的随机搜索算法,例如遗传算法、粒子群优化算法等。特别适用于求解复杂、非线性、非凸的多目标优化问题。
③ 数学规划方法 (Mathematical Programming Methods):基于梯度信息的确定性算法,例如多目标梯度下降法、序列二次规划法等。适用于具有良好数学性质的问题。
本节将重点介绍两种经典的传统方法:加权和法 (Weighted Sum Method) 和 ε-约束法 (ε-Constraint Method)。
10.3.1 加权和法 (Weighted Sum Method)
加权和法 (Weighted Sum Method) 是最简单、最直观的多目标优化方法之一。它的基本思想是通过为每个目标函数分配一个非负权重,然后将所有加权后的目标函数求和,从而将多目标优化问题转化为一个单目标优化问题进行求解。
对于多目标优化问题:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{F}(\mathbf{x}) = [f_1(\mathbf{x}), f_2(\mathbf{x}), \ldots, f_m(\mathbf{x})]^T \\ \text{s.t.} \quad & \mathbf{x} \in \mathcal{X} \end{aligned} \]
加权和法将其转化为以下单目标优化问题:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & f(\mathbf{x} | \mathbf{w}) = \sum_{i=1}^{m} w_i f_i(\mathbf{x}) \\ \text{s.t.} \quad & \mathbf{x} \in \mathcal{X} \end{aligned} \]
其中,\(\mathbf{w} = [w_1, w_2, \ldots, w_m]^T\) 是 权重向量 (weight vector),满足 \(w_i \geq 0\) for all \(i = 1, 2, \ldots, m\) 和 \(\sum_{i=1}^{m} w_i = 1\)。权重 \(w_i\) 表示第 \(i\) 个目标函数 \(f_i(\mathbf{x})\) 在总体目标中的重要程度。
通过改变权重向量 \(\mathbf{w}\),我们可以得到不同的 Pareto 最优解。当 \(\mathbf{w}\) 取遍所有可能的权重组合时,理论上可以生成整个 Pareto 前沿。
加权和法的优点:
① 简单易实现 (Simple and easy to implement):加权和法将多目标问题转化为单目标问题,可以直接使用现有的单目标优化算法进行求解。
② 概念直观 (Intuitive concept):权重可以直观地反映决策者对不同目标的偏好。
加权和法的缺点:
① 无法生成非凸 Pareto 前沿 (Cannot generate non-convex Pareto front):如果 Pareto 前沿是非凸的,加权和法可能无法找到 Pareto 前沿的非凸部分。这是因为对于非凸 Pareto 前沿的某些区域,可能不存在对应的权重向量能够使其成为单目标优化问题的最优解。
② 权重选择困难 (Difficulty in weight selection):如何选择合适的权重向量 \(\mathbf{w}\) 以获得期望的 Pareto 最优解,或者均匀分布的 Pareto 前沿,通常是一个难题。特别是在目标函数数量较多时,权重组合的空间会非常大。
③ 目标函数量纲不一致问题 (Issue with inconsistent objective function scales):如果不同目标函数的量纲或数量级差异很大,权重向量的选择可能会受到影响。通常需要对目标函数进行归一化处理,以消除量纲和数量级差异的影响。
尽管存在一些缺点,加权和法仍然是一种常用的多目标优化方法,特别是在目标函数数量不多,且 Pareto 前沿大致为凸形的情况下。
示例 10.2: 继续考虑示例 10.1 的双目标优化问题:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{F}(\mathbf{x}) = [f_1(x), f_2(x)]^T = [x, \frac{1}{x}]^T \\ \text{s.t.} \quad & x \in [0.1, 10] \end{aligned} \]
使用加权和法,将其转化为单目标优化问题:
\[ \begin{aligned} \min_{x} \quad & f(x | w) = w_1 f_1(x) + w_2 f_2(x) = w_1 x + w_2 \frac{1}{x} \\ \text{s.t.} \quad & x \in [0.1, 10] \end{aligned} \]
其中,\(w_1, w_2 \geq 0\) 且 \(w_1 + w_2 = 1\)。例如,当 \(w_1 = 0.5, w_2 = 0.5\) 时,单目标问题变为:
\[ \begin{aligned} \min_{x} \quad & f(x) = 0.5x + 0.5 \frac{1}{x} \\ \text{s.t.} \quad & x \in [0.1, 10] \end{aligned} \]
对 \(f(x)\) 求导并令导数为零,得到 \(0.5 - 0.5 \frac{1}{x^2} = 0\),解得 \(x = 1\)。由于二阶导数 \(f''(x) = \frac{1}{x^3} > 0\) 在 \(x=1\) 处为正,因此 \(x=1\) 是局部最小值点。又因为可行域是闭区间,且函数在区间内只有一个极值点,所以 \(x=1\) 也是全局最小值点。对应的目标函数值为 \(\mathbf{F}(1) = [1, 1]^T\)。
通过改变 \(w_1\) 和 \(w_2\) 的值,可以得到不同的 Pareto 最优解。例如,当 \(w_1 = 0.8, w_2 = 0.2\) 时,可以得到另一个 Pareto 最优解。
10.3.2 ε-约束法 (ε-Constraint Method)
ε-约束法 (ε-Constraint Method) 是另一种将多目标问题转化为单目标问题的方法。与加权和法不同,ε-约束法只选择一个目标函数作为主要优化目标,而将其他目标函数转化为约束条件,并设定其上限 (或下限) 值。
对于多目标优化问题:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{F}(\mathbf{x}) = [f_1(\mathbf{x}), f_2(\mathbf{x}), \ldots, f_m(\mathbf{x})]^T \\ \text{s.t.} \quad & \mathbf{x} \in \mathcal{X} \end{aligned} \]
ε-约束法选择其中一个目标函数,例如 \(f_j(\mathbf{x})\),作为主要优化目标,并将其他目标函数 \(f_i(\mathbf{x})\) (对于 \(i \neq j\)) 转化为约束条件:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & f_j(\mathbf{x}) \\ \text{s.t.} \quad & f_i(\mathbf{x}) \leq \varepsilon_i, \quad \text{for } i = 1, 2, \ldots, m, i \neq j \\ & \mathbf{x} \in \mathcal{X} \end{aligned} \]
其中,\(\varepsilon_i\) 是预先设定的第 \(i\) 个目标函数 \(f_i(\mathbf{x})\) 的上限值 (或下限值,取决于优化方向)。通过改变 \(\varepsilon_i\) 的值,我们可以得到不同的 Pareto 最优解。
为了生成 Pareto 前沿,通常需要选择一个目标函数作为主要优化目标 (例如 \(f_1(\mathbf{x})\)),然后对其他目标函数 \(f_2(\mathbf{x}), \ldots, f_m(\mathbf{x})\) 的约束上限 \(\varepsilon_2, \ldots, \varepsilon_m\) 在一定范围内进行变化,求解一系列单目标优化问题。
ε-约束法的优点:
① 可以生成非凸 Pareto 前沿 (Can generate non-convex Pareto front):与加权和法不同,ε-约束法可以生成非凸 Pareto 前沿的解。
② 更容易控制 Pareto 前沿的形状 (Easier to control the shape of Pareto front):通过调整 \(\varepsilon_i\) 的值,可以更灵活地探索 Pareto 前沿的不同区域。
ε-约束法的缺点:
① 求解效率可能较低 (Potentially lower solving efficiency):ε-约束法需要求解一系列单目标优化问题才能生成 Pareto 前沿,计算成本可能较高,尤其是在目标函数数量较多时。
② ε 值选择困难 (Difficulty in ε value selection):如何选择合适的 \(\varepsilon_i\) 序列,以获得均匀分布且多样性好的 Pareto 前沿,仍然是一个挑战。如果 \(\varepsilon_i\) 选择不当,可能会导致求解出的 Pareto 最优解分布不均匀,甚至遗漏某些区域的解。
③ 可能产生无可行解的情况 (Possibility of infeasible solutions):如果 \(\varepsilon_i\) 设置过小,可能导致约束条件过于严格,使得单目标优化问题无可行解。
示例 10.3: 继续考虑示例 10.1 的双目标优化问题:
\[ \begin{aligned} \min_{\mathbf{x}} \quad & \mathbf{F}(\mathbf{x}) = [f_1(x), f_2(x)]^T = [x, \frac{1}{x}]^T \\ \text{s.t.} \quad & x \in [0.1, 10] \end{aligned} \]
使用 ε-约束法,选择 \(f_1(x) = x\) 作为主要优化目标,将 \(f_2(x) = \frac{1}{x}\) 转化为约束条件:
\[ \begin{aligned} \min_{x} \quad & f_1(x) = x \\ \text{s.t.} \quad & f_2(x) = \frac{1}{x} \leq \varepsilon_2 \\ & x \in [0.1, 10] \end{aligned} \]
约束条件 \(\frac{1}{x} \leq \varepsilon_2\) 等价于 \(x \geq \frac{1}{\varepsilon_2}\)。因此,单目标优化问题变为:
\[ \begin{aligned} \min_{x} \quad & x \\ \text{s.t.} \quad & x \geq \frac{1}{\varepsilon_2} \\ & x \in [0.1, 10] \end{aligned} \]
为了保证可行域非空,需要 \(\frac{1}{\varepsilon_2} \leq 10\),即 \(\varepsilon_2 \geq 0.1\)。同时,为了保证 \(x \in [0.1, 10]\),还需要 \(\frac{1}{\varepsilon_2} \geq 0.1\),即 \(\varepsilon_2 \leq 10\)。因此,\(\varepsilon_2\) 的取值范围为 \([0.1, 10]\)。
对于给定的 \(\varepsilon_2 \in [0.1, 10]\),最优解为 \(x^* = \max(0.1, \frac{1}{\varepsilon_2})\)。例如,当 \(\varepsilon_2 = 1\) 时,\(x^* = \max(0.1, 1) = 1\),对应的目标函数值为 \(\mathbf{F}(1) = [1, 1]^T\)。当 \(\varepsilon_2 = 2\) 时,\(x^* = \max(0.1, 0.5) = 0.5\),对应的目标函数值为 \(\mathbf{F}(0.5) = [0.5, 2]^T\)。
通过改变 \(\varepsilon_2\) 的值,可以生成不同的 Pareto 最优解,从而近似 Pareto 前沿。
总结来说,加权和法和 ε-约束法是两种经典的多目标优化方法,它们各有优缺点,适用于不同类型的问题。在实际应用中,可以根据问题的特点和需求选择合适的方法,或者结合使用多种方法来求解多目标优化问题。更高级的多目标优化算法,例如进化算法和数学规划方法,将在后续章节中进行介绍。
11. chapter 11: 优化算法的实现与应用 (Implementation and Application of Optimization Algorithms)
11.1 常用优化软件介绍 (Introduction to Common Optimization Software)
在现代科学研究和工程实践中,优化算法的应用日益广泛。为了方便研究人员和工程师应用各种优化方法,许多高效且易用的优化软件工具包应运而生。本节将介绍两种常用的优化软件:MATLAB Optimization Toolbox 和 Python SciPy Optimize,它们为用户提供了丰富的优化算法和便捷的接口,极大地简化了优化问题的求解过程。
11.1.1 MATLAB Optimization Toolbox
MATLAB Optimization Toolbox 是 MATLAB 软件环境下的一个重要组成部分,它提供了一系列用于解决各种优化问题的函数和工具。该工具箱涵盖了线性规划 (Linear Programming, LP)、二次规划 (Quadratic Programming, QP)、非线性规划 (Nonlinear Programming, NLP)、整数规划 (Integer Programming, IP)、多目标优化 (Multi-objective Optimization) 等多种优化方法。无论是学术研究还是工业应用,MATLAB Optimization Toolbox 都是一个强大而可靠的选择。
① 主要功能:
⚝ 丰富的算法库:MATLAB Optimization Toolbox 内置了大量的优化算法,包括:
▮▮▮▮⚝ 线性规划和混合整数线性规划求解器 (Linear and Mixed-Integer Linear Programming Solvers):如 linprog
、intlinprog
等,用于解决线性和混合整数线性规划问题。
▮▮▮▮⚝ 二次规划求解器 (Quadratic Programming Solvers):如 quadprog
,用于解决二次规划问题。
▮▮▮▮⚝ 非线性规划求解器 (Nonlinear Programming Solvers):如 fmincon
、fminunc
等,用于解决有约束和无约束的非线性优化问题。
▮▮▮▮⚝ 多目标优化求解器 (Multi-objective Optimization Solvers):如 gamultiobj
、paretosearch
等,用于解决多目标优化问题。
▮▮▮▮⚝ 全局优化求解器 (Global Optimization Solvers):如 ga
、particleswarm
等,用于寻找全局最优解,尤其适用于非凸优化问题。
⚝ 灵活的问题建模:用户可以使用 MATLAB 语言方便地描述优化问题,包括定义目标函数、约束条件和变量边界。工具箱支持矩阵运算,使得处理大规模优化问题变得高效。
⚝ 友好的用户界面:MATLAB 提供了图形用户界面 (Graphical User Interface, GUI) 工具,如 Optimization Toolbox App,用户可以通过交互式界面设置优化问题、选择算法和查看结果,无需编写代码即可进行优化分析。
⚝ 完善的文档和示例:MATLAB 提供了详尽的文档和丰富的示例,帮助用户快速上手和深入理解各种优化算法的使用方法。
② 简单示例:
以一个简单的线性规划问题为例,演示如何使用 MATLAB Optimization Toolbox 求解。
问题描述:
\[ \begin{aligned} \min_{x} \quad & -x_1 - 2x_2 \\ \text{s.t.} \quad & x_1 + x_2 \leq 5 \\ & 2x_1 + x_2 \leq 8 \\ & x_1, x_2 \geq 0 \end{aligned} \]
MATLAB 代码:
1
f = [-1; -2]; % 目标函数系数
2
A = [1 1; 2 1]; % 不等式约束系数矩阵
3
b = [5; 8]; % 不等式约束右端项
4
lb = [0; 0]; % 变量下界
5
6
options = optimoptions('linprog','Display','iter'); % 设置显示迭代过程
7
[x, fval, exitflag, output] = linprog(f, A, b, [], [], lb, [], options);
8
9
disp('最优解 (Optimal solution):');
10
disp(x);
11
disp('最优值 (Optimal value):');
12
disp(fval);
13
disp('退出标志 (Exit flag):');
14
disp(exitflag);
15
disp('输出信息 (Output information):');
16
disp(output);
代码解释:
⚝ f = [-1; -2]
定义了目标函数 \( -x_1 - 2x_2 \) 的系数向量。
⚝ A = [1 1; 2 1]
和 b = [5; 8]
定义了不等式约束 \( Ax \leq b \)。
⚝ lb = [0; 0]
定义了变量的下界 \( x \geq 0 \)。
⚝ optimoptions('linprog','Display','iter')
设置了 linprog
函数的选项,这里设置显示迭代过程。
⚝ [x, fval, exitflag, output] = linprog(f, A, b, [], [], lb, [], options)
调用 linprog
函数求解线性规划问题,返回最优解 x
、最优值 fval
、退出标志 exitflag
和输出信息 output
。
通过运行上述 MATLAB 代码,可以得到该线性规划问题的最优解和最优值,以及算法的迭代过程和退出状态等信息。MATLAB Optimization Toolbox 的强大功能和简洁的接口,使得用户能够高效地解决各种复杂的优化问题。
11.1.2 Python SciPy Optimize
Python SciPy Optimize 是 Python 科学计算库 SciPy 的一个子模块,专门用于解决各种优化和根查找问题。SciPy Optimize 提供了丰富的优化算法,涵盖了无约束优化 (Unconstrained Optimization)、约束优化 (Constrained Optimization)、全局优化 (Global Optimization)、最小二乘法 (Least Squares) 等多种优化技术。由于 Python 语言的易用性和 SciPy 库的强大功能,SciPy Optimize 成为科研和工程领域中广泛使用的优化工具。
① 主要功能:
⚝ 多样的优化算法:SciPy Optimize 提供了多种优化算法函数,包括:
▮▮▮▮⚝ 无约束优化算法 (Unconstrained Optimization Algorithms):如 minimize
函数,支持梯度下降法 (Gradient Descent)、牛顿法 (Newton's Method)、拟牛顿法 (Quasi-Newton Methods) (BFGS, L-BFGS-B)、共轭梯度法 (Conjugate Gradient) 等多种算法。
▮▮▮▮⚝ 约束优化算法 (Constrained Optimization Algorithms):minimize
函数同样支持约束优化,通过设置 constraints
参数,可以使用序列二次规划法 (Sequential Quadratic Programming, SQP)、内点法 (Interior Point Method)、约束优化信赖域法 (Constrained Optimization by Linear Approximation, COBYLA) 等算法。
▮▮▮▮⚝ 线性规划求解器 (Linear Programming Solvers):linprog
函数用于解决线性规划问题。
▮▮▮▮⚝ 全局优化算法 (Global Optimization Algorithms):differential_evolution
、shgo
、dual_annealing
等函数提供了差分进化算法 (Differential Evolution)、SHGO (Simplicial Homology Global Optimization)、双退火算法 (Dual Annealing) 等全局优化方法。
▮▮▮▮⚝ 最小二乘法和曲线拟合 (Least Squares and Curve Fitting):least_squares
和 curve_fit
函数用于解决非线性最小二乘问题和曲线拟合问题。
⚝ 统一的接口:SciPy Optimize 中的 minimize
函数提供了统一的接口来调用各种优化算法。用户只需根据问题类型选择合适的算法,并通过参数设置来调整算法的行为。
⚝ 与其他 Python 库的兼容性:SciPy Optimize 与 NumPy、Pandas 等 Python 科学计算库无缝集成,可以方便地处理和分析优化问题的数据。同时,它也常与机器学习库如 scikit-learn、TensorFlow、PyTorch 等结合使用,解决机器学习模型中的优化问题。
⚝ 开源和社区支持:SciPy 是一个开源项目,拥有庞大的用户社区和活跃的开发者,用户可以免费使用 SciPy Optimize,并获得及时的技术支持和更新。
② 简单示例:
以与 MATLAB 示例相同的线性规划问题为例,演示如何使用 Python SciPy Optimize 求解。
问题描述:
\[ \begin{aligned} \min_{x} \quad & -x_1 - 2x_2 \\ \text{s.t.} \quad & x_1 + x_2 \leq 5 \\ & 2x_1 + x_2 \leq 8 \\ & x_1, x_2 \geq 0 \end{aligned} \]
Python 代码:
1
from scipy.optimize import linprog
2
3
# 目标函数系数
4
c = [-1, -2]
5
# 不等式约束系数矩阵
6
A = [[1, 1], [2, 1]]
7
# 不等式约束右端项
8
b = [5, 8]
9
# 变量边界
10
x0_bounds = (0, None)
11
x1_bounds = (0, None)
12
13
# 求解线性规划问题
14
res = linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds, x1_bounds], method='simplex')
15
16
print('最优解 (Optimal solution):')
17
print(res.x)
18
print('最优值 (Optimal value):')
19
print(res.fun)
20
print('是否成功 (Success):')
21
print(res.success)
22
print('状态信息 (Message):')
23
print(res.message)
代码解释:
⚝ c = [-1, -2]
定义了目标函数 \( -x_1 - 2x_2 \) 的系数向量。
⚝ A = [[1, 1], [2, 1]]
和 b = [5, 8]
定义了不等式约束 \( Ax \leq b \)。
⚝ bounds=[x0_bounds, x1_bounds]
定义了变量的下界 \( x \geq 0 \)。
⚝ linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds, x1_bounds], method='simplex')
调用 linprog
函数,使用单纯形法 (Simplex Method) 求解线性规划问题,返回结果对象 res
。
通过运行上述 Python 代码,可以得到与 MATLAB 示例相同线性规划问题的最优解和最优值,以及求解器的状态信息。SciPy Optimize 提供了简洁而强大的优化功能,结合 Python 丰富的生态系统,使其成为解决各种优化问题的理想工具。
11.2 优化算法在机器学习中的应用 (Application of Optimization Algorithms in Machine Learning)
优化理论在机器学习 (Machine Learning, ML) 领域中扮演着至关重要的角色。几乎所有的机器学习算法,从简单的线性回归 (Linear Regression) 到复杂的深度神经网络 (Deep Neural Networks, DNNs),都离不开优化方法的支持。机器学习的核心任务通常可以归结为优化问题,即通过调整模型参数,使得模型在给定任务上的性能达到最优。本节将探讨优化算法在机器学习中的主要应用,包括模型训练与参数优化以及正则化方法。
11.2.1 模型训练与参数优化 (Model Training and Parameter Optimization)
机器学习模型的训练过程本质上是一个优化过程。模型的学习目标是找到一组最优参数,使得模型能够最好地拟合训练数据,并具备良好的泛化能力。这个“最好地拟合”通常通过最小化一个损失函数 (Loss Function) 来实现。损失函数衡量了模型预测结果与真实标签之间的差距,优化算法的目标就是找到使损失函数最小化的模型参数。
① 监督学习中的优化:
在监督学习 (Supervised Learning) 中,我们通常有带标签的训练数据集 \( \mathcal{D} = \{(\mathbf{x}_i, y_i)\}_{i=1}^{N} \),其中 \( \mathbf{x}_i \) 是输入特征向量,\( y_i \) 是对应的标签。我们的目标是学习一个模型 \( f(\mathbf{x}; \mathbf{\theta}) \),其中 \( \mathbf{\theta} \) 是模型参数。常见的损失函数包括:
⚝ 均方误差损失 (Mean Squared Error Loss, MSE):用于回归问题,定义为
\[ L(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^{N} (f(\mathbf{x}_i; \mathbf{\theta}) - y_i)^2 \]
⚝ 交叉熵损失 (Cross-Entropy Loss):用于分类问题,对于二分类问题,定义为
\[ L(\mathbf{\theta}) = -\frac{1}{N} \sum_{i=1}^{N} [y_i \log(p_i) + (1-y_i) \log(1-p_i)] \]
其中 \( p_i = P(y=1 | \mathbf{x}_i; \mathbf{\theta}) \) 是模型预测的样本 \( \mathbf{x}_i \) 属于类别 1 的概率。
优化算法的任务是找到参数 \( \mathbf{\theta}^* \),使得损失函数 \( L(\mathbf{\theta}) \) 最小化:
\[ \mathbf{\theta}^* = \arg\min_{\mathbf{\theta}} L(\mathbf{\theta}) \]
常用的优化算法包括:
⚝ 梯度下降法 (Gradient Descent Method):是最常用的优化算法之一,通过迭代更新参数,沿着损失函数梯度的反方向逐步逼近最优解。参数更新公式为:
\[ \mathbf{\theta}_{k+1} = \mathbf{\theta}_{k} - \eta \nabla L(\mathbf{\theta}_{k}) \]
其中 \( \eta \) 是学习率 (Learning Rate),控制每次迭代的步长,\( \nabla L(\mathbf{\theta}_{k}) \) 是损失函数在当前参数 \( \mathbf{\theta}_{k} \) 处的梯度。
⚝ 随机梯度下降法 (Stochastic Gradient Descent, SGD):是梯度下降法的一种变体,每次迭代只使用一个或少量样本计算梯度,大大提高了计算效率,尤其适用于大规模数据集。
⚝ Adam 优化器 (Adaptive Moment Estimation):是一种自适应学习率的优化算法,结合了动量法 (Momentum) 和 RMSProp 算法的优点,能够有效地加速收敛并提高优化性能,是深度学习中常用的优化器。
② 示例:线性回归的梯度下降法:
以线性回归模型为例,演示如何使用梯度下降法进行参数优化。
模型:线性回归模型可以表示为 \( f(x; \mathbf{\theta}) = \mathbf{\theta}^T \mathbf{x} = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_d x_d \),其中 \( \mathbf{\theta} = [\theta_0, \theta_1, \ldots, \theta_d]^T \) 是模型参数,\( \mathbf{x} = [1, x_1, x_2, \ldots, x_d]^T \) 是输入特征向量(为了包含截距项 \( \theta_0 \),通常在特征向量中添加一个常数 1)。
损失函数:使用均方误差损失函数:
\[ L(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{\theta}^T \mathbf{x}_i - y_i)^2 \]
梯度计算:损失函数关于参数 \( \mathbf{\theta} \) 的梯度为:
\[ \nabla L(\mathbf{\theta}) = \frac{2}{N} \sum_{i=1}^{N} (\mathbf{\theta}^T \mathbf{x}_i - y_i) \mathbf{x}_i \]
梯度下降迭代:使用梯度下降法更新参数:
\[ \mathbf{\theta}_{k+1} = \mathbf{\theta}_{k} - \eta \left( \frac{2}{N} \sum_{i=1}^{N} (\mathbf{\theta}_k^T \mathbf{x}_i - y_i) \mathbf{x}_i \right) \]
通过多次迭代,参数 \( \mathbf{\theta} \) 将逐渐收敛到最优值,从而完成线性回归模型的训练。在实际应用中,可以使用 MATLAB Optimization Toolbox 或 Python SciPy Optimize 等工具包来实现梯度下降法,并进行更复杂的模型训练和参数优化。
11.2.2 正则化方法 (Regularization Methods)
为了防止机器学习模型在训练数据上过拟合 (Overfitting),提高模型的泛化能力,通常需要在损失函数中引入正则化项 (Regularization Term)。正则化方法通过约束模型参数的复杂度,避免模型过度拟合训练数据中的噪声和细微变化。优化算法在正则化方法的实现中同样发挥着关键作用。
① 常见的正则化项:
⚝ L1 正则化 (L1 Regularization):也称为 Lasso 正则化,将模型参数的 L1 范数 (L1 Norm) 添加到损失函数中:
\[ L_{reg}(\mathbf{\theta}) = L(\mathbf{\theta}) + \lambda \|\mathbf{\theta}\|_1 = L(\mathbf{\theta}) + \lambda \sum_{j} |\theta_j| \]
其中 \( \lambda > 0 \) 是正则化系数,控制正则化强度。L1 正则化倾向于使模型参数稀疏化,即让许多参数变为 0,从而实现特征选择 (Feature Selection) 的效果。
⚝ L2 正则化 (L2 Regularization):也称为 Ridge 正则化,将模型参数的 L2 范数平方 (Squared L2 Norm) 添加到损失函数中:
\[ L_{reg}(\mathbf{\theta}) = L(\mathbf{\theta}) + \frac{\lambda}{2} \|\mathbf{\theta}\|_2^2 = L(\mathbf{\theta}) + \frac{\lambda}{2} \sum_{j} \theta_j^2 \]
L2 正则化倾向于使模型参数变小,但不像 L1 正则化那样容易产生稀疏性。它可以有效地抑制模型参数的过大波动,提高模型的稳定性。
⚝ Elastic Net 正则化 (Elastic Net Regularization):结合了 L1 和 L2 正则化,通过线性组合 L1 和 L2 正则化项:
\[ L_{reg}(\mathbf{\theta}) = L(\mathbf{\theta}) + \lambda_1 \|\mathbf{\theta}\|_1 + \frac{\lambda_2}{2} \|\mathbf{\theta}\|_2^2 \]
Elastic Net 正则化综合了 L1 和 L2 正则化的优点,既可以实现特征选择,又可以提高模型的稳定性。
② 优化算法与正则化:
引入正则化项后,优化问题的目标变为最小化正则化后的损失函数 \( L_{reg}(\mathbf{\theta}) \)。优化算法,如梯度下降法及其变体,仍然可以用于求解正则化后的优化问题。只需在计算梯度时,将正则化项的梯度也考虑进去即可。
例如,对于 L2 正则化的线性回归模型,正则化后的损失函数为:
\[ L_{reg}(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{\theta}^T \mathbf{x}_i - y_i)^2 + \frac{\lambda}{2} \|\mathbf{\theta}\|_2^2 \]
其梯度为:
\[ \nabla L_{reg}(\mathbf{\theta}) = \frac{2}{N} \sum_{i=1}^{N} (\mathbf{\theta}^T \mathbf{x}_i - y_i) \mathbf{x}_i + \lambda \mathbf{\theta} \]
梯度下降法的参数更新公式变为:
\[ \mathbf{\theta}_{k+1} = \mathbf{\theta}_{k} - \eta \left( \frac{2}{N} \sum_{i=1}^{N} (\mathbf{\theta}_k^T \mathbf{x}_i - y_i) \mathbf{x}_i + \lambda \mathbf{\theta}_k \right) \]
通过优化算法最小化正则化后的损失函数,可以得到具有良好泛化能力的机器学习模型。正则化方法是机器学习中不可或缺的重要技术,而优化算法则是实现正则化的关键工具。
11.3 优化算法在工程领域的应用 (Application of Optimization Algorithms in Engineering)
优化算法在工程领域中有着广泛的应用,几乎所有的工程领域都会遇到各种各样的优化问题。工程优化的目标通常是在满足一系列约束条件的前提下,找到最优的设计方案或运行参数,以提高工程系统的性能、效率和可靠性,降低成本和资源消耗。本节将介绍优化算法在工程领域的两个典型应用:结构优化和控制系统优化。
11.3.1 结构优化 (Structural Optimization)
结构优化 (Structural Optimization) 是工程优化领域的一个重要分支,旨在设计出性能最优的结构。结构优化问题通常涉及在给定的载荷、边界条件和材料约束下,寻找结构的形状、拓扑或尺寸参数,使得结构的重量最轻、刚度最大、应力最小或其他性能指标最优。结构优化在航空航天、汽车工程、建筑设计、机械制造等领域有着广泛的应用。
① 结构优化的类型:
⚝ 尺寸优化 (Sizing Optimization):优化结构构件的尺寸参数,如梁的截面尺寸、板的厚度等,保持结构的拓扑和形状不变。
⚝ 形状优化 (Shape Optimization):优化结构的外部形状,如孔洞的形状、边界曲线的形状等,保持结构的拓扑不变。
⚝ 拓扑优化 (Topology Optimization):在给定的设计空间内,优化材料的分布,决定结构的最优拓扑构型,即材料应该在哪些位置存在,哪些位置为空。拓扑优化能够产生全新的结构设计方案,具有更大的设计自由度。
② 结构优化问题的建模:
结构优化问题通常可以建模为约束优化问题。以最小化结构重量为例,结构优化问题的数学模型可以表示为:
\[ \begin{aligned} \min_{\mathbf{d}} \quad & W(\mathbf{d}) \\ \text{s.t.} \quad & g_i(\mathbf{d}) \leq 0, \quad i = 1, 2, \ldots, m \\ & h_j(\mathbf{d}) = 0, \quad j = 1, 2, \ldots, p \\ & \mathbf{d}_{lb} \leq \mathbf{d} \leq \mathbf{d}_{ub} \end{aligned} \]
其中:
⚝ \( \mathbf{d} \) 是设计变量向量,例如尺寸参数、形状参数或拓扑参数。
⚝ \( W(\mathbf{d}) \) 是目标函数,例如结构重量。
⚝ \( g_i(\mathbf{d}) \leq 0 \) 是不等式约束,例如应力约束、位移约束、稳定性约束等。
⚝ \( h_j(\mathbf{d}) = 0 \) 是等式约束,例如体积约束、频率约束等。
⚝ \( \mathbf{d}_{lb} \) 和 \( \mathbf{d}_{ub} \) 分别是设计变量的下界和上界。
③ 优化算法在结构优化中的应用:
各种优化算法都可以应用于结构优化问题,根据问题的特点和复杂程度选择合适的算法。
⚝ 梯度类算法:如梯度下降法、共轭梯度法、序列二次规划法 (SQP) 等,适用于求解尺寸优化和形状优化问题,这些问题通常具有连续的设计变量和相对光滑的目标函数和约束函数。
⚝ 进化算法:如遗传算法 (Genetic Algorithm, GA)、粒子群优化算法 (Particle Swarm Optimization, PSO) 等,适用于求解拓扑优化问题和一些复杂的形状优化问题,这些问题可能具有离散的设计变量、非光滑的目标函数和约束函数,或者存在多个局部最优解。
⚝ 启发式算法:如模拟退火算法 (Simulated Annealing, SA)、蚁群算法 (Ant Colony Optimization, ACO) 等,也常用于求解结构优化问题,尤其是在全局优化方面。
④ 示例:桁架结构的尺寸优化:
考虑一个简单的桁架结构,目标是最小化桁架结构的重量,同时满足应力约束。设计变量是桁架杆件的截面积。可以使用梯度类优化算法,如序列二次规划法 (SQP),求解该尺寸优化问题。
在实际工程应用中,结构优化通常需要结合有限元分析 (Finite Element Analysis, FEA) 等数值方法,计算结构在不同设计方案下的性能指标(如应力、位移等),并将这些计算结果作为优化算法的输入,进行迭代优化,最终得到最优的结构设计方案。专业的结构优化软件,如 ANSYS、OptiStruct、Nastran 等,集成了各种优化算法和有限元分析功能,为工程师提供了强大的结构优化工具。
11.3.2 控制系统优化 (Control System Optimization)
控制系统优化 (Control System Optimization) 是指在控制系统设计和运行过程中,通过优化算法寻找最优的控制策略或系统参数,以实现期望的控制性能指标。控制系统优化的目标可以是提高系统的响应速度、精度、稳定性,降低能量消耗、成本,或者提高系统的鲁棒性 (Robustness) 等。控制系统优化在自动化、航空航天、机器人、化工、电力等领域有着广泛的应用。
① 控制系统优化的类型:
⚝ 参数优化 (Parameter Optimization):优化控制器的参数,如比例-积分-微分 (Proportional-Integral-Derivative, PID) 控制器的参数、状态反馈控制器的增益矩阵等,保持控制器的结构不变。
⚝ 结构优化 (Structure Optimization):优化控制器的结构,如选择合适的控制器类型、确定控制器的阶数、设计控制器的拓扑结构等。
⚝ 最优控制 (Optimal Control):设计最优的控制律 (Control Law),使得系统在满足约束条件的前提下,实现某个性能指标的最优化,如最小时间控制、最小能量控制、最优跟踪控制等。
② 控制系统优化问题的建模:
控制系统优化问题通常可以建模为动态优化问题或参数优化问题。以参数优化为例,控制系统优化问题的数学模型可以表示为:
\[ \begin{aligned} \min_{\mathbf{K}} \quad & J(\mathbf{K}) \\ \text{s.t.} \quad & \text{System Dynamics} \\ & \text{Stability Constraints} \\ & \text{Performance Constraints} \\ & \mathbf{K}_{lb} \leq \mathbf{K} \leq \mathbf{K}_{ub} \end{aligned} \]
其中:
⚝ \( \mathbf{K} \) 是控制器参数向量,例如 PID 控制器的参数 \( (K_p, K_i, K_d) \) 或状态反馈增益矩阵。
⚝ \( J(\mathbf{K}) \) 是性能指标函数,例如稳态误差、超调量、调节时间、能量消耗等。
⚝ "System Dynamics" 描述了被控对象的动态模型,通常用微分方程或差分方程表示。
⚝ "Stability Constraints" 是保证闭环系统稳定性的约束条件。
⚝ "Performance Constraints" 是对控制系统性能的要求,例如跟踪精度、响应速度等。
⚝ \( \mathbf{K}_{lb} \) 和 \( \mathbf{K}_{ub} \) 分别是控制器参数的下界和上界。
③ 优化算法在控制系统优化中的应用:
各种优化算法都可以应用于控制系统优化问题,根据问题的类型和复杂程度选择合适的算法。
⚝ 梯度类算法:如梯度下降法、序列二次规划法 (SQP) 等,适用于参数优化问题,当性能指标函数和约束函数关于控制器参数具有良好的可导性时。
⚝ 无梯度优化算法:如 Nelder-Mead 单纯形法、模式搜索法等,适用于参数优化问题,当性能指标函数和约束函数难以计算梯度或不光滑时。
⚝ 进化算法:如遗传算法 (GA)、粒子群优化算法 (PSO) 等,适用于结构优化和参数优化问题,尤其是在全局优化和处理复杂约束方面。
⚝ 最优控制理论方法:如庞特里亚金最大值原理 (Pontryagin's Maximum Principle)、动态规划 (Dynamic Programming) 等,用于求解最优控制问题,设计最优控制律。
④ 示例:PID 控制器参数整定:
PID 控制器是最常用的工业控制器之一。PID 参数整定 (PID Tuning) 就是一个典型的控制系统参数优化问题。目标是找到最优的 PID 参数 \( (K_p, K_i, K_d) \),使得闭环控制系统具有良好的性能,如快速响应、小超调、稳态误差小等。可以使用各种优化算法,如遗传算法、粒子群优化算法或无梯度优化算法,自动整定 PID 参数。
在实际工程应用中,控制系统优化通常需要结合系统仿真 (System Simulation) 和实验验证。通过仿真软件(如 MATLAB/Simulink、LabVIEW 等)建立控制系统模型,使用优化算法在仿真模型上进行优化,得到初步的控制策略或参数,然后在实际系统中进行实验验证和微调,最终实现期望的控制性能。专业的控制系统设计和优化软件,如 MATLAB Control System Toolbox、Simulink Design Optimization 等,提供了丰富的优化算法和控制系统分析工具,为工程师提供了强大的控制系统优化平台。
本章介绍了优化算法在实现和应用方面的一些关键内容,包括常用优化软件工具的介绍,以及优化算法在机器学习和工程领域的典型应用。通过学习本章内容,读者可以了解到如何利用现有的优化软件工具解决实际问题,并深入理解优化算法在不同领域中的应用价值和潜力。随着优化理论和算法的不断发展,以及计算能力的持续提升,优化算法将在未来的科技进步和社会发展中发挥越来越重要的作用。
12. chapter 12: 前沿专题与未来展望 (Frontier Topics and Future Perspectives)
12.1 大规模优化 (Large-scale Optimization)
随着数据规模和模型复杂性的爆炸式增长,传统优化算法在处理大规模问题时面临着巨大的挑战。大规模优化 (Large-scale Optimization) 致力于研究和开发能够有效解决包含数百万甚至数十亿决策变量和约束条件优化问题的方法。这类问题广泛存在于机器学习、数据挖掘、网络分析、物流管理、金融工程等领域。
挑战 (Challenges):
① 计算复杂度 (Computational Complexity): 传统优化算法的计算复杂度通常与问题规模呈多项式甚至指数关系。对于大规模问题,计算时间和内存需求往往难以承受。例如,单纯形法在最坏情况下的时间复杂度是指数级的,而内点法虽然在多项式时间内可解,但对于超大规模问题,其计算量仍然巨大。
② 数据存储与访问 (Data Storage and Access): 大规模优化问题通常伴随着海量数据。如何高效地存储和访问这些数据,避免内存瓶颈,是算法设计的关键考虑因素。传统的将所有数据加载到内存中的方法不再适用,需要采用外存算法或者分布式存储方案。
③ 算法收敛性与稳定性 (Convergence and Stability of Algorithms): 大规模优化问题往往具有高度非线性、非凸性和病态性。这给算法的收敛性和稳定性带来了严峻的挑战。传统的优化算法可能收敛速度缓慢,甚至陷入局部最优解。
关键技术与方法 (Key Techniques and Methods):
① 分解方法 (Decomposition Methods): 将大规模问题分解为若干个小规模子问题,并行或串行地求解子问题,然后通过协调机制将子问题的解组合成原问题的解。常见的分解方法包括:
▮▮▮▮ⓑ Benders 分解 (Benders Decomposition): 适用于具有特殊结构的线性规划和混合整数规划问题,将问题分解为主问题和子问题,迭代求解。
▮▮▮▮ⓒ Dantzig-Wolfe 分解 (Dantzig-Wolfe Decomposition): 主要用于解决具有块对角结构的线性规划问题,通过列生成技术求解主问题。
▮▮▮▮ⓓ 交替方向乘子法 (Alternating Direction Method of Multipliers, ADMM): 一种广泛应用于分布式优化和大规模优化的算法,通过交替更新变量和对偶变量,将问题分解为易于求解的子问题。
② 并行计算 (Parallel Computing): 利用多核处理器、GPU 或分布式计算集群的并行计算能力,加速优化算法的执行。并行计算可以应用于:
▮▮▮▮ⓑ 梯度计算并行化 (Parallelization of Gradient Computation): 在梯度下降等迭代算法中,可以并行计算目标函数和约束函数的梯度。
▮▮▮▮ⓒ 线性代数运算并行化 (Parallelization of Linear Algebra Operations): 大规模优化算法通常涉及大量的矩阵运算,例如矩阵乘法、矩阵分解等,这些运算可以高效地并行化。
▮▮▮▮ⓓ 算法迭代并行化 (Parallelization of Algorithm Iterations): 某些优化算法的迭代过程可以并行执行,例如异步并行算法。
③ 随机优化算法 (Stochastic Optimization Algorithms): 利用随机采样或随机梯度等技术,降低每次迭代的计算复杂度。随机梯度下降法 (Stochastic Gradient Descent, SGD) 及其变体是解决大规模机器学习问题最常用的优化算法之一。
④ 低秩近似与压缩感知 (Low-rank Approximation and Compressed Sensing): 利用大规模问题中数据或模型的低秩结构,降低问题的维度和计算复杂度。压缩感知 (Compressed Sensing) 技术可以在数据稀疏的情况下,用远低于奈奎斯特采样定理要求的采样点数恢复原始信号,从而降低数据处理规模。
⑤ 近似算法与启发式算法 (Approximation Algorithms and Heuristic Algorithms): 在保证解的质量的前提下,牺牲一定的精度,换取更快的求解速度。启发式算法 (Heuristic Algorithms) 例如遗传算法、模拟退火算法、粒子群优化算法等,虽然不能保证找到全局最优解,但在实际应用中往往能够找到令人满意的近似解。
应用领域 (Application Areas):
⚝ 机器学习与深度学习 (Machine Learning and Deep Learning): 训练大规模机器学习模型,特别是深度神经网络,需要解决大规模优化问题。例如,深度学习中的参数优化通常使用随机梯度下降法及其变体。
⚝ 推荐系统 (Recommendation Systems): 构建个性化推荐系统需要处理海量的用户和商品数据,优化推荐模型的参数。
⚝ 社交网络分析 (Social Network Analysis): 分析大规模社交网络,例如社区发现、影响力最大化等问题,需要解决图优化问题。
⚝ 物流与供应链管理 (Logistics and Supply Chain Management): 优化物流路径、库存管理、供应链调度等问题,通常涉及大规模优化模型。
⚝ 金融工程 (Financial Engineering): 投资组合优化、风险管理、算法交易等金融问题,需要解决大规模优化问题。
12.2 分布式优化 (Distributed Optimization)
分布式优化 (Distributed Optimization) 研究如何利用分布式计算系统(例如,计算机集群、传感器网络、移动设备网络)解决优化问题。在分布式环境中,数据和计算资源分散在不同的节点上,节点之间通过网络进行通信。分布式优化旨在设计高效的算法,使得各个节点能够在局部信息的基础上协同工作,最终达到全局优化目标。
动机 (Motivations):
① 数据分布式存储 (Data is Distributed): 在许多应用场景中,数据本身就是分布式存储的。例如,在联邦学习中,数据分布在各个用户的设备上;在传感器网络中,数据由各个传感器节点采集。将数据集中到中心节点进行处理可能不现实或不可行,甚至涉及隐私问题。
② 计算资源分布式 (Computational Resources are Distributed): 利用分布式计算系统的并行计算能力,可以加速优化算法的执行,解决大规模优化问题。
③ 系统鲁棒性与可靠性 (Robustness and Reliability of Systems): 分布式系统具有更好的鲁棒性和可靠性。即使部分节点发生故障,系统仍然可以继续运行。
关键技术与方法 (Key Techniques and Methods):
① 一致性优化 (Consensus Optimization): 旨在使分布式网络中的所有节点就某个变量的值达成一致。平均一致性算法 (Average Consensus Algorithm) 是最基本的一致性算法,通过节点之间的信息交换和平均操作,使得所有节点的值最终收敛到初始值的平均值。一致性优化是许多分布式优化算法的基础。
② 交替方向乘子法 (Alternating Direction Method of Multipliers, ADMM): ADMM 是一种非常流行的分布式优化算法,适用于解决具有可分离结构的问题。它可以将全局问题分解为多个局部子问题,每个节点负责求解一个子问题,并通过交换信息实现协同优化。ADMM 及其变体广泛应用于机器学习、统计推断、控制系统等领域。
③ 原始-对偶方法 (Primal-Dual Methods): 基于对偶理论的分布式优化方法。分布式梯度投影法 (Distributed Gradient Projection Method) 和 分布式次梯度法 (Distributed Subgradient Method) 是常见的原始-对偶方法,适用于解决约束优化问题。
④ 基于分解的方法 (Decomposition-based Methods): 将原问题分解为多个子问题,每个节点负责求解一个或多个子问题。例如,分布式 Benders 分解 (Distributed Benders Decomposition) 和 分布式 Dantzig-Wolfe 分解 (Distributed Dantzig-Wolfe Decomposition) 是分解方法在分布式环境下的扩展。
⑤ 无梯度优化方法 (Derivative-free Optimization Methods): 在某些分布式场景中,梯度信息难以获取或计算代价昂贵。分布式模式搜索 (Distributed Pattern Search) 和 分布式进化算法 (Distributed Evolutionary Algorithms) 等无梯度优化方法可以在不依赖梯度信息的情况下进行优化。
通信与隐私 (Communication and Privacy):
① 通信效率 (Communication Efficiency): 在分布式优化中,节点之间的通信是主要的瓶颈。如何减少通信量,提高通信效率,是分布式算法设计的关键考虑因素。压缩通信 (Communication Compression) 和 事件触发通信 (Event-triggered Communication) 等技术可以有效地减少通信量。
② 隐私保护 (Privacy Preservation): 在某些应用场景中,数据包含敏感信息,需要保护用户隐私。差分隐私 (Differential Privacy) 和 同态加密 (Homomorphic Encryption) 等隐私保护技术可以应用于分布式优化,在保证优化性能的同时,保护数据隐私。联邦学习 (Federated Learning) 是隐私保护分布式优化的一个重要分支,主要应用于机器学习领域。
应用领域 (Application Areas):
⚝ 联邦学习 (Federated Learning): 在保护用户隐私的前提下,利用分布式数据训练机器学习模型。
⚝ 无线传感器网络 (Wireless Sensor Networks): 传感器网络中的数据融合、目标跟踪、网络控制等问题,可以建模为分布式优化问题。
⚝ 智能电网 (Smart Grids): 电力系统的分布式优化控制、需求响应、能源管理等问题。
⚝ 多智能体系统 (Multi-agent Systems): 多机器人协同控制、分布式任务分配、群体智能等问题。
⚝ 云计算与边缘计算 (Cloud Computing and Edge Computing): 利用云计算和边缘计算资源进行大规模数据处理和优化。
12.3 优化算法的最新进展 (Latest Advances in Optimization Algorithms)
优化理论和算法持续发展,近年来涌现出许多新的研究方向和进展,为解决更复杂、更具挑战性的优化问题提供了新的工具和方法。
最新进展 (Latest Advances):
① 深度学习优化 (Optimization for Deep Learning): 深度学习的快速发展极大地推动了优化算法的研究。针对深度神经网络的训练,研究者们提出了许多新的优化算法,例如:
▮▮▮▮ⓑ 自适应梯度算法 (Adaptive Gradient Algorithms): Adam, AdaGrad, RMSprop 等自适应梯度算法能够根据参数的历史梯度信息动态调整学习率,加速收敛并提高模型性能。
▮▮▮▮ⓒ 二阶优化算法 (Second-order Optimization Algorithms): K-FAC, Shampoo 等二阶优化算法利用二阶梯度信息,能够更有效地优化深度神经网络,但计算复杂度较高。
▮▮▮▮ⓓ 优化器设计自动化 (Automated Optimizer Design): Neural Optimizer Search (NOS) 等方法利用神经网络搜索最优的优化器,实现优化算法的自动化设计。
② 非凸优化 (Non-convex Optimization): 现实世界中的许多优化问题是非凸的,例如深度学习、控制系统、信号处理等领域的问题。非凸优化算法的研究取得了显著进展:
▮▮▮▮ⓑ 非凸梯度下降法分析 (Analysis of Non-convex Gradient Descent): 研究表明,在一定条件下,梯度下降法可以有效地找到非凸问题的局部最优解,甚至全局最优解。
▮▮▮▮ⓒ 逃逸鞍点算法 (Saddle Point Escaping Algorithms): 鞍点是非凸优化中的一个挑战。研究者们提出了各种逃逸鞍点算法,例如 扰动梯度下降法 (Perturbed Gradient Descent) 和 信赖域方法 (Trust Region Methods),能够有效地避免陷入鞍点。
▮▮▮▮ⓓ 全局优化算法 (Global Optimization Algorithms): 分支定界法 (Branch and Bound Method), 割平面法 (Cutting Plane Method), 进化算法 (Evolutionary Algorithms), 模拟退火算法 (Simulated Annealing) 等全局优化算法旨在找到非凸问题的全局最优解,但计算复杂度通常较高。
③ 元启发式算法 (Meta-heuristic Algorithms): 元启发式算法 (Meta-heuristic Algorithms) 是一类受自然或生物系统启发的优化算法,例如:
▮▮▮▮ⓑ 遗传算法 (Genetic Algorithm, GA): 模拟生物进化过程的优化算法,通过选择、交叉、变异等操作搜索最优解。
▮▮▮▮ⓒ 粒子群优化算法 (Particle Swarm Optimization, PSO): 模拟鸟群觅食行为的优化算法,通过粒子之间的信息交流和协作搜索最优解。
▮▮▮▮ⓓ 蚁群算法 (Ant Colony Optimization, ACO): 模拟蚂蚁觅食行为的优化算法,通过信息素的积累和挥发搜索最优路径。
▮▮▮▮ⓔ 差分进化算法 (Differential Evolution, DE): 一种基于种群的进化算法,通过差分变异操作产生新的解。
▮▮▮▮ⓕ 人工蜂群算法 (Artificial Bee Colony Algorithm, ABC): 模拟蜜蜂采蜜行为的优化算法,通过雇佣蜂、跟随蜂和侦察蜂的协同搜索最优解。
元启发式算法具有通用性强、易于实现、鲁棒性好等优点,广泛应用于解决复杂优化问题。
④ 量子优化 (Quantum Optimization): 量子计算 (Quantum Computing) 的快速发展为优化算法带来了新的机遇。量子退火算法 (Quantum Annealing) 和 变分量子特征求解器 (Variational Quantum Eigensolver, VQE) 等量子优化算法利用量子力学的特性,有望加速解决某些类型的优化问题。目前,量子优化仍处于发展初期,但其潜力巨大。
⑤ 在线优化与动态优化 (Online Optimization and Dynamic Optimization): 在线优化 (Online Optimization) 研究在环境动态变化或信息逐步到达的情况下进行优化决策。动态优化 (Dynamic Optimization) 研究如何优化随时间变化的系统。这些领域的研究关注算法的实时性、适应性和鲁棒性。
未来展望 (Future Perspectives):
① 优化算法与人工智能的深度融合 (Deep Integration of Optimization Algorithms and Artificial Intelligence): 优化算法是人工智能的核心技术之一。未来,优化算法将与机器学习、深度学习、强化学习等人工智能技术更加紧密地结合,共同推动人工智能的发展。
② 可解释优化与可信赖优化 (Explainable Optimization and Trustworthy Optimization): 随着优化算法在关键领域的应用越来越广泛,对优化结果的可解释性和可信赖性提出了更高的要求。可解释优化 (Explainable Optimization) 旨在提高优化算法的透明度和可理解性。可信赖优化 (Trustworthy Optimization) 关注优化算法的鲁棒性、公平性、隐私保护等方面。
③ 优化算法的硬件加速 (Hardware Acceleration of Optimization Algorithms): 利用专用硬件(例如,FPGA, ASIC, 神经形态芯片, 量子计算机)加速优化算法的执行,提高计算效率,降低能耗,是未来的重要发展方向。
④ 面向特定领域的优化算法设计 (Domain-specific Optimization Algorithm Design): 针对不同领域的优化问题,设计更加高效、更加专业的优化算法。例如,针对生物信息学、材料科学、金融工程等领域的优化问题,开发定制化的优化算法。
⑤ 优化理论与算法的普及化与 democratisation (Popularization and Democratization of Optimization Theory and Algorithms): 将优化理论和算法推广到更广泛的领域和人群,提高公众对优化的认识和应用能力,是未来的重要趋势。通过开发易于使用的优化软件、工具包和在线教育资源,降低优化技术的门槛,使更多的人能够利用优化解决实际问题。
附录A: 参考文献 (References)
本章所涉及的优化理论与算法内容广泛,以下列出一些经典的参考文献,供读者进一步学习和研究:
书籍 (Books):
① Convex Optimization by Stephen Boyd and Lieven Vandenberghe. Cambridge University Press, 2004. (凸优化领域的经典教材,内容全面深入,理论严谨)
② Numerical Optimization by Jorge Nocedal and Stephen J. Wright. Springer, 2006. (数值优化领域的权威著作,涵盖无约束优化、约束优化、大规模优化等内容)
③ Linear Programming by George B. Dantzig and Mukund N. Thapa. Springer, 1997. (线性规划的经典教材,详细介绍了单纯形法、对偶理论等)
④ Nonlinear Programming by Dimitri P. Bertsekas. Athena Scientific, 1999. (非线性规划的经典教材,深入探讨了各种非线性规划算法)
⑤ Dynamic Programming and Optimal Control by Dimitri P. Bertsekas. Athena Scientific, 2005. (动态规划和最优控制的权威著作)
⑥ Optimization for Machine Learning by Suvrit Sra, Sebastian Nowozin, and Stephen J. Wright. MIT Press, 2012. (机器学习优化领域的经典教材,介绍了机器学习中常用的优化算法)
⑦ Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers by Stephen Boyd, Neal Parikh, Eric Chu, Borja Peleato, and Jonathan Eckstein. Foundations and Trends in Machine Learning, 2011. (ADMM 算法的综述性文章,详细介绍了 ADMM 的理论和应用)
期刊与会议 (Journals and Conferences):
① Mathematical Programming (优化理论领域的顶级期刊)
② SIAM Journal on Optimization (SIAM 优化期刊,关注优化算法的理论、应用和计算方面)
③ Operations Research (运筹学领域的顶级期刊,包含优化、决策分析、排队论等内容)
④ Journal of Global Optimization (全局优化领域的期刊)
⑤ IEEE Transactions on Automatic Control (IEEE 自动控制汇刊,包含优化控制、系统理论等内容)
⑥ Neural Information Processing Systems (NeurIPS) (神经信息处理系统会议,机器学习和人工智能领域的顶级会议,包含大量的优化算法研究)
⑦ International Conference on Machine Learning (ICML) (国际机器学习会议,机器学习领域的顶级会议,优化算法是重要的研究主题)
⑧ International Conference on Learning Representations (ICLR) (国际学习表征会议,深度学习领域的顶级会议,优化算法是深度学习研究的关键)
在线资源 (Online Resources):
① CVX Research, Inc. (提供凸优化建模软件 CVX 和相关资源) http://cvxr.com/
② NEOS Guide (提供各种优化算法的在线求解器和教程) https://neos-guide.org/
③ Optimization Online (优化领域的预印本平台) https://optimization-online.org/
④ Stephen Boyd's course materials on Convex Optimization (Stephen Boyd 教授的凸优化课程资料,包括讲义、视频、习题等) https://web.stanford.edu/~boyd/cvxbook/
读者可以通过查阅以上参考文献,深入了解优化理论与算法的各个方面,并跟踪最新的研究进展。
附录B: 术语表 (Glossary)
本术语表收录了本书中常用的优化术语,并提供简明扼要的解释,方便读者查阅和理解。
术语 (中文) | 术语 (英文) | 解释 |
---|---|---|
优化 | Optimization | 在一定约束条件下,寻找使目标函数达到最优值(最大值或最小值)的决策变量的过程。 |
优化问题 | Optimization Problem | 由决策变量、目标函数和约束条件构成的数学问题,旨在寻找最优解。 |
决策变量 | Decision Variables | 优化问题中需要确定的未知量,其取值直接影响目标函数和约束条件。 |
目标函数 | Objective Function | 优化问题中需要最大化或最小化的函数,通常是决策变量的函数。 |
约束条件 | Constraints | 对决策变量取值范围的限制条件,可以是等式约束或不等式约束。 |
可行解 | Feasible Solution | 满足所有约束条件的决策变量的取值。 |
可行域 | Feasible Region | 所有可行解构成的集合。 |
最优解 | Optimal Solution | 在可行域内,使目标函数达到最优值的可行解。 |
局部最优解 | Local Optimal Solution | 在可行域的局部范围内,使目标函数达到最优值的可行解。 |
全局最优解 | Global Optimal Solution | 在整个可行域内,使目标函数达到最优值的可行解。 |
线性规划 | Linear Programming (LP) | 目标函数和约束条件都是线性函数的优化问题。 |
非线性规划 | Nonlinear Programming (NLP) | 目标函数或约束条件包含非线性函数的优化问题。 |
凸优化 | Convex Optimization | 可行域是凸集,目标函数是凸函数(最小化问题)或凹函数(最大化问题)的优化问题。 |
凸集 | Convex Set | 集合中任意两点的连线上的点都属于该集合。 |
凸函数 | Convex Function | 函数图像上任意两点连线上的点都在函数图像的上方或等于函数图像上的点。 |
凹函数 | Concave Function | 函数图像上任意两点连线上的点都在函数图像的下方或等于函数图像上的点。 |
无约束优化 | Unconstrained Optimization | 没有约束条件的优化问题。 |
约束优化 | Constrained Optimization | 包含约束条件的优化问题。 |
等式约束 | Equality Constraint | 约束条件为等式形式。 |
不等式约束 | Inequality Constraint | 约束条件为不等式形式。 |
拉格朗日乘子法 | Lagrange Multiplier Method | 求解等式约束优化问题的经典方法,引入拉格朗日乘子将约束优化问题转化为无约束优化问题。 |
KKT条件 | Karush-Kuhn-Tucker Conditions | 求解不等式约束优化问题的最优性条件,是拉格朗日乘子法的推广。 |
对偶理论 | Duality Theory | 研究原始问题和对偶问题之间关系的理论,可以用于分析优化问题的性质和设计优化算法。 |
单纯形法 | Simplex Method | 求解线性规划问题的经典算法,通过在可行域的顶点之间移动搜索最优解。 |
内点法 | Interior Point Method | 求解线性规划和非线性规划问题的有效算法,在可行域内部进行搜索。 |
梯度下降法 | Gradient Descent Method | 求解无约束优化问题的迭代算法,沿着目标函数负梯度方向搜索最优解。 |
牛顿法 | Newton's Method | 求解无约束优化问题的迭代算法,利用目标函数的二阶导数信息加速收敛。 |
共轭梯度法 | Conjugate Gradient Method | 求解无约束优化问题的迭代算法,适用于大规模问题,具有较快的收敛速度。 |
序列二次规划法 | Sequential Quadratic Programming (SQP) | 求解非线性约束优化问题的有效算法,将非线性问题近似为一系列二次规划子问题求解。 |
分支定界法 | Branch and Bound Method | 求解整数规划问题的经典算法,通过分支和定界策略搜索最优解。 |
割平面法 | Cutting Plane Method | 求解整数规划问题的算法,通过不断添加割平面缩小可行域,最终得到整数最优解。 |
动态规划 | Dynamic Programming (DP) | 求解具有最优子结构和重叠子问题性质的优化问题的算法,将问题分解为子问题,自底向上或自顶向下求解。 |
随机优化 | Stochastic Optimization | 目标函数或约束条件包含随机因素的优化问题。 |
随机梯度下降法 | Stochastic Gradient Descent (SGD) | 求解随机优化问题的迭代算法,利用随机梯度估计真实梯度。 |
模拟退火算法 | Simulated Annealing (SA) | 一种全局优化算法,模拟金属退火过程,通过接受一定概率的劣解跳出局部最优解。 |
遗传算法 | Genetic Algorithm (GA) | 一种全局优化算法,模拟生物进化过程,通过选择、交叉、变异等操作搜索最优解。 |
多目标优化 | Multi-objective Optimization | 具有多个目标函数的优化问题。 |
Pareto最优 | Pareto Optimality | 多目标优化问题的解的概念,指无法在不损害其他目标函数的情况下改善某个目标函数的解。 |
大规模优化 | Large-scale Optimization | 决策变量和约束条件数量巨大的优化问题。 |
分布式优化 | Distributed Optimization | 利用分布式计算系统解决优化问题的方法。 |
ADMM | Alternating Direction Method of Multipliers | 交替方向乘子法,一种常用的分布式优化算法。 |
元启发式算法 | Meta-heuristic Algorithms | 一类受自然或生物系统启发的全局优化算法。 |
量子优化 | Quantum Optimization | 利用量子计算解决优化问题的方法。 |
附录C: 索引 (Index)
本索引按照关键词的字母顺序排列,方便读者快速查找书中相关内容。页码指向关键词首次出现的章节或重要段落。
索引 (Index):
⚝ ADMM (交替方向乘子法): 12.1, 12.2, 附录B
⚝ Adam: 12.3
⚝ AdaGrad: 12.3
⚝ Benders 分解: 12.1, 12.2
⚝ 分支定界法: 7.2, 12.3, 附录B
⚝ 背包问题: 8.3.1
⚝ 单纯形法: 3.3, 12.1, 附录B, 附录A
⚝ Dantzig-Wolfe 分解: 12.1, 12.2
⚝ 导数: 2.2.1
⚝ 动态规划: 8, 附录B, 附录A
⚝ 对偶理论: 3.4, 5.4, 附录B, 附录A
⚝ 多目标优化: 10, 附录B
⚝ 分布式优化: 12.2, 附录B
⚝ 可行方向法: 6.4
⚝ 可行解: 3.3.1, 附录B
⚝ 可行域: 附录B
⚝ 割平面法: 7.3, 12.3, 附录B
⚝ 共轭梯度法: 4.5, 附录B
⚝ 梯度: 2.2.1
⚝ 梯度下降法: 4.3, 12.3, 附录B
⚝ 函数:
▮▮▮▮⚝ 凹函数: 2.2.3, 附录B
▮▮▮▮⚝ 凸函数: 2.2.3, 2.3.2, 附录B
▮▮▮▮⚝ 目标函数: 1.4.2, 附录B
⚝ 遗传算法: 9.4, 12.1, 12.3, 附录B
⚝ 整数规划: 7
⚝ KKT条件: 5.3, 附录B
⚝ 拉格朗日乘子法: 5.2, 附录B
⚝ 拉格朗日对偶: 5.4.1
⚝ 粒子群优化算法: 12.1, 12.3
⚝ 线性代数: 2.1
⚝ 线性规划: 3, 附录B, 附录A
⚝ 灵敏度分析: 3.5
⚝ 模拟退火算法: 9.3, 12.1, 12.3, 附录B
⚝ 内点法: 6.3, 12.1, 附录B
⚝ 牛顿法: 4.4, 附录B
⚝ Pareto最优: 10.2, 附录B
⚝ 强对偶: 3.4.2, 5.4.2
⚝ 切线搜索: 4.3.2
⚝ 全局最优解: 附录B
⚝ 量子优化: 12.3, 附录B
⚝ 随机梯度下降法 (SGD): 9.2, 12.1, 附录B
⚝ 随机优化: 9, 附录B
⚝ 弱对偶: 3.4.2
⚝ 凸分析: 2.3
⚝ 凸集: 2.3.1, 附录B
⚝ 凸优化: 2.3.3, 附录B, 附录A
⚝ 泰勒展开: 2.2.2
⚝ 特征值: 2.1.3
⚝ 特征向量: 2.1.3
⚝ 向量: 2.1.1
⚝ 无约束优化: 4, 附录B
⚝ 线性空间: 2.1.2
⚝ 约束条件: 1.4.3, 附录B
⚝ 约束优化: 5, 附录B
⚝ 最优解: 附录B
⚝ 最优性条件: 4.2
⚝ 最优子结构: 8.1.1
⚝ 子空间: 2.1.2
⚝ 0-1整数规划: 7.4
⚝ 重叠子问题: 8.1.2
⚝ 矩阵: 2.1.1
⚝ 最长公共子序列: 8.3.2
⚝ 局部最优解: 附录B
⚝ 大规模优化: 12.1, 附录B
⚝ 非线性规划: 6, 附录B, 附录A
⚝ 序列二次规划法 (SQP): 6.2, 附录B
⚝ 决策变量: 1.4.1, 附录B