4.(Python数模)0-1规划

Python解决0-1规划问题

参考下面文章
4.(Python数模)0-1规划_第1张图片

源代码

import pulp      # 导入 pulp 库

# 主程序
def main():
    # 投资决策问题:
    # 公司现有 5个拟投资项目,根据投资额、投资收益和限制条件,问如何决策使收益最大。
    """
    问题建模:
        决策变量:
            x1~x5:0/1 变量,1 表示选择第 i 个项目, 0 表示不选择第 i 个项目
        目标函数:
            max fx = 150*x1 + 210*x2 + 60*x3 + 80*x4 + 180*x5
        约束条件:
            210*x1 + 300*x2 + 100*x3 + 130*x4 + 260*x5 <= 600
            x1 + x2 + x3 = 1
            x3 + x4 <= 1
            x5 <= x1
            x1,...,x5 = 0, 1
    """
    InvestLP = pulp.LpProblem("Invest decision problem", sense=pulp.LpMaximize)  # 定义问题,求最大值
    # 参数 cat 用来设定变量类型,’ Binary ’ 表示0/1变量(用于0/1规划问题)。
    x1 = pulp.LpVariable('x1', cat='Binary')  # 定义 x1,A 项目
    x2 = pulp.LpVariable('x2', cat='Binary')  # 定义 x2,B 项目
    x3 = pulp.LpVariable('x3', cat='Binary')  # 定义 x3,C 项目
    x4 = pulp.LpVariable('x4', cat='Binary')  # 定义 x4,D 项目
    x5 = pulp.LpVariable('x5', cat='Binary')  # 定义 x5,E 项目
    InvestLP += 150*x1 + 210*x2 + 60*x3 + 80*x4 + 180*x5  # 设置目标函数 f(x)
    InvestLP += (210*x1 + 300*x2 + 100*x3 + 130*x4 + 260*x5 <= 600)  # 不等式约束
    InvestLP += (x1 + x2 + x3 == 1)  # 等式约束
    InvestLP += (x3 + x4 <= 1)  # 不等式约束
    InvestLP += (x5 - x1 <= 0)  # 不等式约束
    InvestLP.solve()  # solve() 是求解函数,可以对求解器、求解精度进行设置。
    print(InvestLP.name)  # 输出求解状态
    print("Status youcans:", pulp.LpStatus[InvestLP.status])  # 输出求解状态
    for v in InvestLP.variables():
        print(v.name, "=", v.varValue)  # 输出每个变量的最优值
    print("Max f(x) =", pulp.value(InvestLP.objective))  # 输出最优解的目标函数值

    return

if __name__ == '__main__':
    main()

运行结果

4.(Python数模)0-1规划_第2张图片

你可能感兴趣的:(python,数学建模,python,开发语言)