练习1
一汽车厂生产小、中、大三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需求,利润以及每月工厂钢材、劳动时间的现有量如下表所示,试制定月生产计划,使工厂的利润最大。进一步讨论:由于各种条件限制,如果生产某一类型汽车,则至少要生产80辆,那么最优的生产计划应作何改变。
资源/利润 | 小型汽车 | 中型汽车 | 大型汽车 | 现有量 |
---|---|---|---|---|
钢材 (吨) | 1.5 | 3 | 5 | 600 |
劳动时间(小时) | 280 | 250 | 400 | 60000 |
利润 (万元) | 2 | 3 | 4 |
目标是最大化利润,在满足钢材和劳动时间的约束条件下,决定每个月生产的小、中、大型汽车的数量。
1.1 不考虑如果生产某一类型汽车,则至少要生产80辆
-
定义决策变量:
\(x_1\) 表示生产小型车的数量;\(x_2\)表示生产中型车的数量;\(x_3\) 表示生产大型车的数量 -
目标函数:
最大化利润 $Z = 2x_1 + 3x_2 + 4x_3 $ -
约束条件:
钢材约束:$1.5x_1 + 3x_2 + 5x_3 \leq 600 $
劳动时间约束:$280x_1 + 250x_2 + 400x_3 \leq 60000 $ -
非负性约束:
$x_1, x_2, x_3 \geq 0 $
from pulp import LpMaximize, LpProblem, LpVariable, lpSum, value, LpInteger
# 定义问题
problem = LpProblem("Maximize Profit", LpMaximize)
# 定义变量
x1 = LpVariable("x1", lowBound=0, cat=LpInteger)
x2 = LpVariable("x2", lowBound=0, cat=LpInteger)
x3 = LpVariable("x3", lowBound=0, cat=LpInteger)
# 目标函数
problem += 2 * x1 + 3 * x2 + 4 * x3
# 约束条件
problem += 1.5 * x1 + 3 * x2 + 5 * x3 <= 600
problem += 280 * x1 + 250 * x2 + 400 * x3 <= 60000
# 求解问题
problem.solve()
# 打印结果
print('Optimal production plan:')
print(f'Small cars: {value(x1):.0f}')
print(f'Medium cars: {value(x2):.0f}')
print(f'Large cars: {value(x3):.0f}')
print(f'Maximum Profit: {value(problem.objective):.2f} 万元')
Optimal production plan:
Small cars: 64
Medium cars: 168
Large cars: 0
Maximum Profit: 632.00 万元
1.2 考虑如果生产某一类型汽车,则至少要生产80辆
-
定义决策变量:需要添加3个0-1变量表示某一类型汽车是否生产
\(y_1\) 表示是否生产小型车(0 或 1);$ y_2$ 表示是否生产中型车(0 或 1);\(y_3\) 表示是否生产大型车(0 或 1) -
若生产某种类型的汽车,则至少生产80辆:
- \(y\) 变量的约束:
from pulp import LpMaximize, LpProblem, LpVariable, lpSum, value
# 定义问题
problem = LpProblem("Maximize Profit", LpMaximize)
# 定义变量
x1 = LpVariable("x1", lowBound=0, cat='Integer')
x2 = LpVariable("x2", lowBound=0, cat='Integer')
x3 = LpVariable("x3", lowBound=0, cat='Integer')
y1 = LpVariable("y1", cat='Binary')
y2 = LpVariable("y2", cat='Binary')
y3 = LpVariable("y3", cat='Binary')
# 目标函数
problem += 2 * x1 + 3 * x2 + 4 * x3
# 约束条件
problem += 1.5 * x1 + 3 * x2 + 5 * x3 <= 600
problem += 280 * x1 + 250 * x2 + 400 * x3 <= 60000
problem += x1 >= 80 * y1
problem += x2 >= 80 * y2
problem += x3 >= 80 * y3
# 求解问题
problem.solve()
# 打印结果
print('Optimal production plan:')
print(f'Small cars: {value(x1):.0f}')
print(f'Medium cars: {value(x2):.0f}')
print(f'Large cars: {value(x3):.0f}')
print(f'Maximum Profit: {value(problem.objective):.2f} 万元')
Optimal production plan:
Small cars: 64
Medium cars: 168
Large cars: 0
Maximum Profit: 632.00 万元
练习2
固定成本问题:高压容器公司制造小、中、大三种尺寸的金属容器,所用资源为金属板、劳动力和机器设备,制造一个容器所需的各种资源数量如下表。不考虑固定费用,每种容器单位利润分别为4万元、5万元、6万元,可使用的金属板500吨,劳动力300人/月,机器100台/月,此外只要生产,需支付固定费用:小号是100万元,中号为150万元,大号为200万元。试制定一个生产计划,使获利最大。
资源 | 小号容器 | 中号容器 | 大号容器 |
---|---|---|---|
金属板 (t) | 2 | 4 | 8 |
劳动力 (人/月) | 3 | 4 | 2 |
机器设备 (台/月) | 1 | 0 | 1 |
-
定义决策变量:
\(x_1\)表示生产小号容器的数量;\(x_2\)表示生产中号容器的数量;\(x_3\) 表示生产大号容器的数量
\(y_1\)表示是否生产小号容器(0 或 1);\(y_2\)表示是否生产中号容器(0 或 1);\(y_3\)表示是否生产大号容器(0 或 1) -
目标函数:
最大化利润$$Z = 4x_1 + 5x_2 + 6x_3 - 100y_1 - 150y_2 - 200y_3$$ -
约束条件:
金属板约束:
劳动力约束:
\[3x_1 + 4x_2 + 2x_3 \leq 300 \]机器设备约束:
\[x_1 + x_3 \leq 100 \]- 若生产某种类型的容器,则至少支付固定费用:
其中\(M\)是一个足够大的常数。
- \(y\)变量的约束:
- 非负性约束:
from pulp import LpMaximize, LpProblem, LpVariable, lpSum, value, LpInteger, LpBinary
# 定义问题
problem = LpProblem("Maximize Profit", LpMaximize)
# 定义变量
x1 = LpVariable("x1", lowBound=0, cat=LpInteger)
x2 = LpVariable("x2", lowBound=0, cat=LpInteger)
x3 = LpVariable("x3", lowBound=0, cat=LpInteger)
y1 = LpVariable("y1", cat=LpBinary)
y2 = LpVariable("y2", cat=LpBinary)
y3 = LpVariable("y3", cat=LpBinary)
# 目标函数
problem += 4 * x1 + 5 * x2 + 6 * x3 - 100 * y1 - 150 * y2 - 200 * y3
# 约束条件
problem += 2 * x1 + 4 * x2 + 8 * x3 <= 500
problem += 3 * x1 + 4 * x2 + 2 * x3 <= 300
problem += x1 + x3 <= 100
# 固定费用约束
M = 10000 # 这里 M 取一个足够大的常数
problem += x1 <= M * y1
problem += x2 <= M * y2
problem += x3 <= M * y3
# 求解问题
problem.solve()
# 打印结果
print('Optimal production plan:')
print(f'Small containers: {value(x1):.0f}')
print(f'Medium containers: {value(x2):.0f}')
print(f'Large containers: {value(x3):.0f}')
print(f'Maximum Profit: {value(problem.objective):.2f} 万元')
Optimal production plan:
Small containers: 100
Medium containers: 0
Large containers: 0
Maximum Profit: 300.00 万元
标签:x1,LpVariable,Python,cat,x2,x3,problem,精解,运筹学
From: https://www.cnblogs.com/haohai9309/p/18261582