7.(Python数模)消防站的选址问题

news2024/11/16 15:56:58

Python解决消防站的选址问题

原文参考该博文

问题描述

在这里插入图片描述

源代码

import pulp  # 导入 pulp 库


# 主程序
def main():
    # 问题建模:
    """
        决策变量:
            x(j) = 0, 不选择第 j 个消防站
            x(j) = 1, 选择第 j 个消防站, j=1,8
        目标函数:
            min fx = sum(x(j)), j=1,8
        约束条件:
            sum(x(j)*R(i,j),j=1,8) >=1, i=1,8
        变量取值范围:
            x(j) = 0,1
    """

    # 消防站的选址问题 (set covering problem, site selection of fire station)
    # 1.建立优化问题 SetCoverLP: 求最小值(LpMinimize)
    SetCoverLP = pulp.LpProblem("SetCover_problem_for_fire_station", sense=pulp.LpMinimize)  # 定义问题,求最小值
    # 2. 建立变量
    zones = list(range(8))  # 定义各区域
    x = pulp.LpVariable.dicts("zone", zones, cat="Binary")  # 定义 0/1 变量,是否在该区域设消防站
    # 3. 设置目标函数
    SetCoverLP += pulp.lpSum([x[j] for j in range(8)])  # 设置消防站的个数
    # 4. 施加约束
    reachable = [[1, 0, 0, 0, 0, 0, 0, 0],
                 [0, 1, 1, 0, 0, 0, 0, 0],
                 [0, 1, 1, 0, 1, 0, 0, 0],
                 [0, 0, 0, 1, 0, 0, 0, 0],
                 [0, 0, 0, 0, 1, 0, 0, 0],
                 [0, 0, 0, 0, 0, 1, 1, 0],
                 [0, 0, 0, 0, 0, 0, 1, 1],
                 [0, 0, 0, 0, 0, 0, 1, 1]]  # 参数矩阵,第 i 消防站能否在 10分钟内到达第 j 区域
    for i in range(8):
        SetCoverLP += pulp.lpSum([x[j] * reachable[j][i] for j in range(8)]) >= 1

    # 5. 求解
    SetCoverLP.solve()
    # 6. 打印结果
    print(SetCoverLP.name)
    temple = "区域 %(zone)d 的决策是:%(status)s"  # 格式化输出
    if pulp.LpStatus[SetCoverLP.status] == "Optimal":  # 获得最优解
        for i in range(8):
            output = {'zone': i + 1,  # 与问题中区域 1~8 一致
                      'status': '建站' if x[i].varValue else '--'}
            print(temple % output)
        print("需要建立 {} 个消防站。".format(pulp.value(SetCoverLP.objective)))

    return


if __name__ == '__main__':
    main()


运行结果

在这里插入图片描述

要点

temple = “区域 %(zone)d 的决策是:%(status)s”
output = {‘zone’: i + 1, # 与问题中区域 1~8 一致
‘status’: ‘建站’ if x[i].varValue else ‘–’}
print(temple % output)
学习一下使用字典的格式化输出方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/963524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++心愿便利店】No.4---C++初谈类和对象

文章目录 前言一、面向过程和面向对象初步认识二、类的引用三、类的定义四、类的访问限定符及封装五、类的作用域六、类的实例化七、类对象模型八、this指针 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球&…

PVZ紫卡植物排名

前言 此文章为“植物大战僵尸”专栏中的第003刊(2023年9月第一刊)。 无名版中有很多紫卡植物,分别是忧郁菇、玉米加农炮、猫尾草、机枪射手、地刺王、冰西瓜投手、双子向日葵、吸金菇。 提示:双子向日葵(向日葵的升…

300行代码,教你用Python写个飞机大战

闲赋在家,甚是无聊,便萌发了研究经典小游戏:飞机大战的念头,想必大家可能玩过微信的这款小游戏,给我的感觉是这款游戏怎么可以做得这么好呢,操作简单,容易上手,简直是“老少皆宜”啊…

2023-09-02 LeetCode每日一题(最多可以摧毁的敌人城堡数目)

2023-09-02每日一题 一、题目编号 2511. 最多可以摧毁的敌人城堡数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个长度为 n ,下标从 0 开始的整数数组 forts ,表示一些城堡。forts[i] 可以是 -1 ,0 或者 1 ,其中&…

Android 1.1 背景相关与系统架构分析

目录 1.1 背景相关与系统架构分析 分类 Android 基础入门教程 1.Android背景与当前的状况 2.Android系统特性与平台架构 系统特性: 平台架构图: 架构的简单理解: 3.本节小结: 1.1 背景相关与系统架构分析 分类 Android 基础…

C++ 分割字符串数据

使用stringstream流&#xff08;已验证&#xff09; 引入头文件 #include <sstream> 功能实现&#xff1a; string keyValue "WTH01#WTH02#WTH03#WTH04#WTH05" string keys[6] { "" }; stringstream is(keyValue); string temp; int index 0;…

stable diffusion实践操作-采样sample

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、采样是什么&#xff1f;1.1 SD原理图1.2 SD中采样工作流程1.3 SD重复预测采样结果1.4 SD中采样方法列表1.4 SD中采样方法功能总结1.5 SD中常用采样方法 二、 SD中常用采样方法对比2.1 二次元-第一组2.1.…

YOLOv5训练自己的数据集并测试(以及踩坑记录)

YOLOv5是一个非常流行的图像识别框架&#xff0c;这里介绍一下使用YOLOv5给自己的数据集进行训练和测试 官方介绍文档&#xff1a;YOLOv5官方文档 基本流程&#xff1a; 下载必要的库和包&#xff0c;以及yolov5框架自制数据集&#xff1a;收集图像、视频数据&#xff0c;la…

从零开发JavaWeb入门项目--十天掌握

原文网址&#xff1a;从零开发JavaWeb入门项目--十天掌握_IT利刃出鞘的博客-CSDN博客 简介 这是一个靠谱的JavaWeb入门项目实战&#xff0c;名字叫蚂蚁爱购。从零开发项目&#xff0c;视频加文档&#xff0c;十天就能学会开发JavaWeb项目&#xff0c;教程路线是&#xff1a;搭…

Super Resolve Dynamic Scene from Continuous Spike Streams论文笔记

摘要 近期&#xff0c;脉冲相机在记录高动态场景中展示了其优越的潜力。不像传统相机将一个曝光时间内的视觉信息进行压缩成像&#xff0c;脉冲相机连续地输出二的脉冲流来记录动态场景&#xff0c;因此拥有极高的时间分辨率。而现有的脉冲相机重建方法主要集中在重建和脉冲相…

Windows 重新映射 CapsLock 大写锁定到 Ctrl

Windows 重新映射 CapsLock 大写锁定到 Ctrl 本要点中的这些方法适用于我的美国键盘布局。我不确定其他布局。如果出现问题&#xff0c;请恢复您的更改&#xff1b;删除您创建的注册表项&#xff08;并重新启动&#xff09;。 强烈推荐 方法5 ctrl2cap&#xff0c;因为不会影…

代码随想录第35天|860.柠檬水找零 , 406.根据身高重建队列(很多细节点注意一下),452. 用最少数量的箭引爆气球

860.柠檬水找零 思路比较简单 class Solution {public boolean lemonadeChange(int[] bills) {//然后向你付 5 美元、10 美元或 20 美元//如果收到5&#xff0c;直接收下//如果收到10&#xff0c;需要付回去5//如果收到20&#xff0c;需要付回去105或者555//开始时我手上拥有…

java基础-----第八篇

系列文章目录 文章目录 系列文章目录一、Java类加载器二、双亲委托模型 一、Java类加载器 JDK自带有三个类加载器&#xff1a;bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 BootStrapClassLoader是ExtClassLoader的父类加载器&#xff0c;默认负责加载%JAVA_HOME…

Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)...

各位看友&#xff0c;由于微信公众号推送机制改变&#xff0c;现在需要设置为星标才能收到的本公众号推送消息哟。关注回复【学习交流群】加入【安全开发运维】答疑交流群 请朋友们【多多点击文中的广告】&#xff0c;支持作者更新更多文章。 目录: 本文为作者原创文章&#xf…

c++数据结构之 队列

c数据结构 --- 队列 队列的特点队列的相关概念&#xff1a;队列的操作&#xff1a;队列的分类&#xff1a;演示例子简单的例子例子2、循环队列的C实现 队列的特点 队列&#xff08;Queue&#xff09;与栈一样&#xff0c;是一种线性存储结构&#xff0c;它具有如下特点&#x…

学习振弦采集模块的开发基本原理

飞讯教学篇&#xff1a;学习振弦采集模块的开发基本原理 振弦采集模块是一种用于测量物体振动、形变、压力等物理量的电子设备。它通过测量物体的振动变化&#xff0c;可以得出物体在不同条件下的动态特性&#xff0c;对于工程设计、科学研究、医学检测等领域都有广泛应用。本…

代码随想录笔记--二叉树篇

1--递归遍历 1-1--前序遍历 前序遍历&#xff1a;根→左→右&#xff1b; #include <iostream> #include <vector>struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), le…

6400万美元:苹果与SpaceX达成合作协议,推进苹果 SOS 卫星服务

根据最新披露的文件&#xff0c;苹果卫星服务提供商Globalstar近期与马斯克旗下的SpaceX达成一项重要合作协议&#xff0c;向SpaceX支付了6400万美元&#xff0c;用于在2023-2025年期间发射卫星&#xff0c;以进一步扩展苹果iPhone系列的SOS卫星服务。 这项卫星服务的主要目的是…

Citespace、vosviewer、R语言的文献计量学 、SCI

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

中国太保首席数据库专家林春:先难后易,核心系统数据库升级复盘

P17 是中国太平洋保险&#xff08;以下简称太保&#xff09;关联关系最为复杂、商业数据库绑定程度最深、业务影响最多的核心系统之一。但就是这样一个对太保业务至关重要的系统却被选为数据库升级的“实验品”。当然&#xff0c;说是“实验品”只是因为这是太保第一次对关键的…