非线性规划的定义
数学规划是运筹学的一个分支,它用来研究在给定条件下(约束条件),如何按照一衡量指标(目标函数)来寻求计划、管理工作中的最优方案。
[math]\min [/math]或[math]\max f(x), \text{ s.t. } g_i(x) \leq 0 [/math](如果是大于的则要手动改为小于0)
这里的[math]x[/math]称为决策变量;[math]f(x)[/math]称为目标函数;[math]g_i(x) \leq 0[/math]称为约束条件。
如果[math]f(x)[/math]和约束条件均为非线性表达式,则此时就是非线性规划。
非线性规划的应用
例 1. 在约10000m高空的某边长160km的正方形区域内,经常有若干架飞机作水平飞行。
区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。当一架
欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会与区域内
的飞机发生碰撞。如果会碰撞,则应计算如何调整各架(包括新进人的)飞机飞行的方向
角,以避免碰撞。现假定条件如下:
(1)不碰撞的标准为任意两架飞机的距离大于8km。
(2)飞机飞行方向角调整的幅度不应超过30°。
(3)所有飞机飞行速度均为800km/h。
(4)进人该区域的飞机在到达区域边缘时,与区域内飞机的距离应在60km以上。
(5)最多需考虑6架飞机。
(6)不必考虑飞机离开此区域后的状况。
请对这个避免碰撞的飞行管理问题建立数学模型,列出计算步骤,对以下数据进行计算(方向角误差不超过 0.01 度),要求飞机飞行方向角调整的幅度尽量小。
设该区域 4 个顶点的坐标为[math](0,0)[/math],[math](160,0)[/math],[math](160,160)[/math],[math](0,160)[/math]。记录数据见下表。
| 飞机编号 | 横坐标x | 纵坐标y | 方向角[math]/(^{\circ})[/math] |
|---|---|---|---|
| 1 | 150 | 140 | 243 |
| 2 | 85 | 85 | 236 |
| 3 | 150 | 155 | 220.5 |
| 4 | 145 | 50 | 159 |
| 5 | 130 | 150 | 230 |
| 新进入 | 0 | 0 | 52 |
解题思路
由题意知,任意两架飞机 [math] i, j [/math] 不发生碰撞的条件为 [math]\min d_{ij}(t) > 8 [/math],即任意时刻距离最近时也要大于 8 公里。还要求方向角度调整尽可能小。所以目标函数为 [math]\min \sum_{i = 1}^{6} |\Delta \theta_i|[/math] 或 [math]\min \sum_{i = 1}^{6} (\Delta \theta_i)^2 [/math],一般选后者。
设 [math] i [/math] 和 [math] j [/math] 两架飞机的初始坐标为 [math](x_i^0, y_i^0)[/math]、[math](x_j^0, y_j^0)[/math],则经过 [math] t [/math] 时间后,[math] x_i (t) = x_i^0 + vt \cos \theta_i [/math],[math] y_i (t) = y_i^0 + vt \sin \theta_i [/math],[math]\theta_i = \theta_i^0 + \Delta \theta_i [/math],[math]|\Delta \theta_i| \leqslant \frac {\pi}{6}[/math],[math] i = 1, 2, \cdots, n [/math]。
所以两机距离 [math] d_{ij}(t) = \sqrt {(x_i – x_j)^2 + (y_i – y_j)^2}[/math],为了计算方便,将其平方后再令 [math] d_{ij}^{(2)}(t) = [x_i (t) – x_j (t)]^2 + [y_i (t) – y_j (t)]^2 [/math],然后再求 [math]\min d_{ij}^{(2)}(t)[/math],转换为求一元函数极值问题 。

(这里公式太复杂,就选择直接截图了)
同理,对于这 6 架飞机,两两组合分别代入上面的[math]d_{ij}(t)[/math]就可得到 15 个约束关系式。于是我们得到:
[math] \min \sum_{i = 1}^{6} (\Delta \theta_i)^2 \ \text{s.t.} \begin{cases} d_{12}^{(2)} > 64 \\ d_{13}^{(2)} > 64 \\ d_{14}^{(2)} > 64 \\ \cdots \\ d_{56}^{(2)} > 64 \end{cases} [/math]
最后使用MATLAB等工具对该式求解即可。