习题
习题2.1
试将下述非线性的0-1规划问题转换成线性的0-1规划问题
m a x z = x 1 + x 1 x 2 − x 3 s . t . = { − 2 x 1 + 3 x 2 + x 3 ≤ 3 x j = 0 或 1 , j = 1 , 2 , 3 max z = x_1+x_1x_2-x_3\\ s.t.= \begin{cases} -2x_1 + 3x_2+x_3 \leq 3\\ x_j = 0 \text{或}1,\ \ j = 1,2,3 \end{cases} maxz=x1+x1x2−x3s.t.={
−2x1+3x2+x3≤3xj=0或1, j=1,2,3
算法设计
做变量替换 y = x 1 x 2 y = x_1x_2 y=x1x2,则有如下关系:
x 1 + x 2 − 1 ≤ y ≤ x 1 x 1 + x 2 − 1 ≤ y ≤ x 2 x_1+x_2-1 \leq y \leq x_1 \\ x_1 + x_2 -1 \leq y \leq x_2 x1+x2−1≤y≤x1x1+x2−1≤y≤x2
从而得到如下的线性0-1规划
m a x z = x 1 + y − x 3 s . t . = { − 2 x 1 + 3 x 2 + x 3 ≤ 3 x 1 + x 2 − 1 ≤ y ≤ x 1 x 1 + x 2 − 1 ≤ y ≤ x 2 x j = 0 或 1 , j = 1 , 2 , 3 y = 0 或 1 max z = x_1 + y - x_3\\ s.t.= \begin{cases} -2x_1 + 3x_2 + x_3 \leq 3\\ x_1 + x_2 -1 \leq y \leq x_1\\ x_1 + x_2 -1 \leq y \leq x_2\\ x_j = 0 或 1, \ \ j = 1,2,3\\ y = 0或1 \end{cases} maxz=x1+y−x3s.t.=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧−2x1+3x2+x3≤3x1+x2−1≤y≤x1x1+x2−1≤y≤x2xj=0或1, j=1,2,3y=0或1
习题2.2
某市为方便小学生上学,拟在新建的8个居民小区 A 1 , A 2 , . . . , A 8 A_1,A_2,...,A_8 A1,A2,...,A8增设若干所小学,经过论证知备选校址有 B 1 , B 2 , . . . , B 6 B_1,B_2,...,B_6 B1,B2,...,B6,它们能够覆盖的居民小区如下表所示。
| B 1 B_1 B1 | B 2 B_2 B2 | B 3 B_3 B3 | B 4 B_4 B4 | B 5 B_5 B5 | B 6 B_6 B6 |
|---|---|---|---|---|---|
| A 1 , A 5 , A 7 A_1,A_5,A_7 A1,A5,A7 | A 1 , A 2 , A 5 , A 8 A_1,A_2,A_5,A_8 A1,A2,A5,A8 | A 1 , A 3 , A 5 A_1,A_3,A_5 A1,A3,A5 | A 2 , A 4 , A 8 A_2,A_4,A_8 A2,A4,A8 | A 3 , A 6 A_3,A_6 A3,A6 | A 4 , A 6 , A 8 A_4,A_6,A_8 A4,A6,A8 |
试建立一个数学模型,确定出最小个数的建校地址,使其能够覆盖所有的居民小区
算法设计
令
x i = { 1 , 在 备 选 校 址 B i 建 学 校 0 , 在 备 选 校 址 B i 不 建 学 校 x_{i} = \begin{cases} 1,\ \ \ 在备选校址B_{i}建学校\\ 0,\ \ \ 在备选校址B_{i}不建学校\\ \end{cases} xi={
1, 在备选校址Bi建学校0, 在备选校址Bi不建学校
小区 A 1 A_{1} A1可以被备选校址B_1、B_2、B_3处所建的学校覆盖,则有约束条件
x 1 + x 2 + x 3 ≥ 1 x_1 + x_2 + x_3 \geq 1 x1+x2+x3≥1
依次类推,建立如下0-1整数规划模型:
m i n ∑ i = 1 6 x i s . t . = { x 1 + x 2 + x 3 ≥ 1 x 2 + x 4 ≥ 1 x 3 + x 5 ≥ 1 x 4 + x 6 ≥ 1 x 5 + x 6 ≥ 1 x 1 ≥ 1 x 2 + x 4 + x 6 ≥ 1 x i = 0 或 1 , i = 1 , 2 , . . . , 8 min \sum^{6}_{i = 1}x_i\\ s.t. = \begin{cases} x_1 + x_2 + x_3 \geq 1 \\ x_2 + x_4 \geq 1 \\ x_3 + x_5 \geq 1 \\ x_4 + x_6 \geq 1 \\ x_5 + x_6 \geq 1 \\ x_1 \geq 1\\ x_2 + x_4 + x_6 \geq 1 \\ x_{i} = 0 或 1,\ \ \ i = 1,2,...,8 \end{cases} mini=1∑6xis.t.=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧x1+x2+x3≥1x2+x4≥1x3+x5≥1x4+x6≥1x5+x6≥1x1≥1x2+x4+x6≥1xi=0或1, i=1,2,...,8
# 决策变量
n = 8
# nonneg参数,变量是否为非负
x = cp.Variable(n,nonneg = True)
# 约束1
A1 = np.array([[1,1,1,0,0,0,0,0],
[0,1,0,1,0,0,0,0],
[0,0,1,0,1,0,0,0],
[0,0,0,1,0,1,0,0],
[0,0,0,0,1,1,0,0],
[1,0,0,0,0,0,0,0],
[0,1,0,1,0,1,0,0]])
b1 = np.array([1,1,1,1,1,1,1])
# 约束2
A2 = np.ones((8, 8))
for i in range(A2.shape[0]):
for j in range(A2.shape[1]):
if i == j:
pass
else:
A2[i, j] = A2[i, j]*0
b2 = np.array([0,0,0,0,0,0,0,0])
# 约束3
A3 = np.ones((8, 8))
for i in range(A3.shape[0]):
for j in range(A3.shape[1]):
if i == j:
pass
else:
A3[i, j] = A3[i, j]*0
b3 = np.array([1,1,1,1,1,1,1,1])
# 目标函数
c = np.array([1,1,1,1,1,1,1,1])
# 定义问题,添加约束条件
prob = cp.Problem(cp.Minimize(c.T @ x),
[A1 @ x >= b1,
A2 @ x >= b2,
A3 @ x <= b3])
# 求解
ans = prob.solve(solver=cp.GLOP)
# 输出结果
print("目标函数最小值:", ans)
# 对x向量各元素取整数后再输出

本文解析了一系列线性规划习题,包括非线性转线性规划、选址问题、资源分配等,通过建立数学模型并利用Python求解,提供详细的算法设计思路。
最低0.47元/天 解锁文章
3320

被折叠的 条评论
为什么被折叠?



