You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性规划可行区域绘制遇阻,请求排查代码与图形异常

修复线性规划可行区域绘制问题

原代码中的核心错误

  • 拼写与范围问题:np.linespace是笔误,应为np.linspace;x1的取值范围仅到30,远小于约束上限80,导致线条无法延伸到与x轴的交点。
  • 约束方程错误:x1 + x2 ≤120对应的x2表达式应为120 - x1,原代码错误除以3,导致约束线完全偏离。
  • 标签逻辑错误:plt.axvline(80)对应约束是x1 ≤80,原标签写成x1 ≥80,逻辑相反。
  • 坐标轴标签错误:重复调用plt.ylabel覆盖了x轴标签,应使用plt.xlabel设置x1轴。
  • 填充区域参数混乱:fill_between的上下边界与约束条件匹配错误,未正确组合所有限制。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 扩展x1的取值范围,覆盖所有约束区间
x_1 = np.linspace(0, 120, 1000)

# 初始化画布
fig, ax = plt.subplots()
fig.set_size_inches(14.7, 8.27)

# 绘制约束线
plt.axvline(80, color='g', label=r'$x_1 \leq 80$')  # 修正标签逻辑
plt.axvline(15, color='g', label=r'$x_1 \geq 15$')
plt.plot(x_1, 120 - x_1, label=r'$x_1 + x_2 \leq 120$')  # 修正约束3的表达式
plt.plot(x_1, (65 - x_1) / 0.5, label=r'$x_1 + 0.5x_2 \leq 65$')

# 设置坐标轴范围与标签
plt.xlim((0, 120))
plt.ylim((0, 130))
plt.xlabel(r'$x_1$')  # 正确设置x轴标签
plt.ylabel(r'$x_2$')

# 计算可行区域的上下边界
# 上边界:取两个线性约束的较小值,同时不超过y轴上限
upper_bound = np.minimum(120 - x_1, (65 - x_1)/0.5)
# 下边界:x2≥0,同时x1在15到80之间
lower_bound = np.where((x_1 >=15) & (x_1 <=80), 0, -np.inf)

# 填充可行区域,添加约束条件过滤
plt.fill_between(x_1, lower_bound, upper_bound, 
                 where=(x_1 >=15) & (x_1 <=80) & (upper_bound >=0),
                 color='green', alpha=0.25)

# 图例与样式设置
plt.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0.)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

plt.show()

关键修改说明

  1. 扩展x1的取值范围到0-120,确保所有约束线能完整显示到交点。
  2. 修正第一个线性约束的表达式,还原正确的约束线。
  3. 修正竖线约束的标签逻辑,匹配实际限制条件。
  4. 正确区分x轴和y轴标签,避免覆盖。
  5. 重新计算可行区域的上下边界,结合x1≥15、x1≤80、x2≥0所有约束,使用where参数精准过滤填充区域。

内容的提问来源于stack exchange,提问作者Tracy McGinn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:01:00