数学建模题型与知识框架总览
题型:
1.数据处理 2.关联与分析 3.分类与判别 4.评价与决策 5.预测与预报 6.优化与控制
优化与控制:
通过数学模型和算法,寻找最优解的过程
知识框架:
1.线性规划 2.整数规划 3.动态规划 4.非线性规划 5.多目标规划 6.启发式算法
线性规划
判断
目标函数和约束条件均为线性函数--------------所有变量都是一次方
处理方法
1、lindo
(1)打开lindo
(2)步骤
- 输入目标函数,使用
MAX
或MIN
关键字开始。 - 输入约束条件,使用
ST
或SUBJECT TO
关键字开始。 - 每个约束条件单独一行,使用
<=
,>=
, 或=
表示不等式类型。 - 最后,使用
END
关键字结束模型输入。
(3)查看结果
点击小靶子运行求解
点击“是”,进行敏感性分析
查看指标
-
最优解信息
LP OPTIMUM FOUND AT STEP 2
线性规划的最优解在算法在两次迭代后找到。表明问题相对简单或模型结构良好。
-
目标函数值
OBJECTIVE FUNCTION VALUE
1) 26.00000
最优解的目标函数值为26.00000。
-
决策变量值和减少成本
VARIABLE VALUE REDUCED COST
X1 2.000000 0.000000
X2 4.000000 0.000000
X1,X2 0.000000 0.000000
X1
的最优值为2.000000,其减少成本为0.000000,表示在当前最优解下,X1
的目标函数系数变化不会影响最优解。
X2
的最优值为4.000000,其减少成本同样为0.000000,表明X2
的目标函数系数变化也不会影响最优解。
X1,X2
的值为0.000000,可能是非基变量或辅助变量,其减少成本为0.000000,表示这些变量在最优解中不起作用。
-
约束条件的松弛或剩余及对偶价格
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 2.333333
3) 0.000000 0.333333
4) 0.000000 0.000000
第2个约束条件的松弛变量值为0.000000,表明这个约束是紧约束,其对偶价格为2.333333,表示如果该约束的右端值增加1个单位,目标函数值将增加2.333333。
第3个约束条件的松弛变量值为0.000000,也是紧约束,其对偶价格为0.333333,表示如果该约束的右端值增加1个单位,目标函数值将增加0.333333。
第4个约束条件的松弛变量值为0.000000,其对偶价格为0.000000,可能表示这个约束不是紧约束,或者它是一个冗余约束。
-
迭代次数
NO. ITERATIONS= 0
迭代次数为0,这可能表明问题非常简单,或者使用了特定的算法(如单纯形法)在找到最优解之前没有进行任何迭代。
-
目标函数系数的范围
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 3.000000 7.000000 0.500000
X2 5.000000 1.000000 3.500000
X1,X2 0.000000 0.000000 INFINITY
X1
的当前系数为3.000000,系数可以增加至7.000000而不改变最优解,可以减少至0.500000而不改变最优解。
X2
的当前系数为5.000000,系数可以增加至1.000000而不改变最优解,可以减少至3.500000而不改变最优解。
X1,X2
的当前系数为0.000000,系数可以无限减少而不影响最优解。
-
约束条件右端值的范围
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 10.000000 6.000000 6.000000
3 8.000000 12.000000 3.000000
4 0.000000 0.000000 INFINITY
第2个约束条件的当前右端值为10.000000,可以增加至16.000000而不改变最优解,可以减少至4.000000而不改变最优解。
第3个约束条件的当前右端值为8.000000,可以增加至20.000000而不改变最优解,可以减少至5.000000而不改变最优解。
第4个约束条件的当前右端值为0.000000,可以增加至0.000000而不改变最优解,可以减少至0.000000而不改变最优解。
整数规划
判断
是将部分或全部决策变量限制为整数的规划问题
处理:
1、python
构建模型:
import pulp
# 创建LP最小化问题
prob = pulp.LpProblem("Integer Programming Problem", pulp.LpMaximize)
# 定义变量,变量x1,x2,下界为零,整数
x1 = pulp.LpVariable('x1', lowBound=0, cat='Integer') # Non-negative integer variable
x2 = pulp.LpVariable('x2', lowBound=0, cat='Integer') # Non-negative integer variable
# Objective function
prob += 3 * x1 + 5 * x2
# Constraints
prob += x1 + 2 * x2 <= 10
prob += 2 * x1 + x2 <= 8
# Solve the problem
prob.solve()
# Print the results
print("Status:", pulp.LpStatus[prob.status])
print("Optimal values:")
print("x1 =", pulp.value(x1))
print("x2 =", pulp.value(x2))
print("Optimal objective value:", pulp.value(prob.objective))
查看结果:
技巧
1、目标函数整体加“+”“-”号可调整目标为求“最大”或“最小”
2、约束条件有“与”“或”关系时可以用0-1模型转换表达逻辑关系
3、对于条件至多有一个参与,或只能参与一个的条件,可以用累加分别小于1和累加等于1(将累加的数作为系数便可达到选择目的)