输入矩阵解决多供给地与多需求地的资源分配最优化问题

news/2024/11/8 22:34:18/

输入矩阵解决多供给地与多需求地的资源分配的线性最优化问题,

输入:

供给地的数目及其资源量,需求地的数目及其需求量,供给地的地理位置,需求地的地理位置
(编写函数计算供给地和需求地的距离,按两点间距离公式计算)

输出:

使得各个供给地和需求地之间的距离与资源运载量之积的和最小

约束:

需求地资源量等于各个供给地运载的到需求地的和,供给地对各个需求地的运载量之和小于等于其资源总量

import numpy as np
from scipy.optimize import linprogdef distance(point1, point2):# 计算两点之间的距离,这里可以根据实际情况选择合适的距离计算方法return np.sqrt((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)def resource_allocation_optimization(ci, dj, supply_locations, demand_locations):n = len(ci)  # 供给地数目m = len(dj)  # 需求地数目# 构建目标函数系数向量 cc = np.zeros(n * m)for i, supply_loc in enumerate(supply_locations):for j, demand_loc in enumerate(demand_locations):c[i*m + j] = distance(supply_loc, demand_loc)# 构建等式约束矩阵 A_eq 和右侧常数向量 b_eqA_eq = np.zeros((m, n*m))b_eq = djfor i in range(m):A_eq[i, i::m] = 1# 构建不等式约束矩阵 A_ub 和右侧常数向量 b_ubA_ub = np.zeros((n, n*m))b_ub = cifor i in range(n):A_ub[i, i*m:(i+1)*m] = 1# 定义变量的上下界bounds = [(0, None) for _ in range(n*m)]# 使用线性规划求解问题result = linprog(c, A_eq=A_eq, b_eq=b_eq, A_ub=A_ub, b_ub=b_ub, bounds=bounds)# 输出结果xij = result.x.reshape(n, m)total_cost = result.funreturn xij, total_cost# 示例输入数据
ci = np.array([20,20])  # 供给地的资源量
dj = np.array([3,5,4,7,6,11])  # 需求地的资源需求量
supply_locations = [(5,1), (2,7)]  # 供给地的地理位置
demand_locations = [(1.25,1.25),(8.75,0.75),(0.5,4.75),(5.75,5),(3,6.5),(7.25,7.25)]  # 需求地的地理位置# 求解资源分配问题
xij, total_cost = resource_allocation_optimization(ci, dj, supply_locations, demand_locations)print("资源分配方案:")
print(xij)
print("最小距离与资源运载量之积:", total_cost)

http://www.ppmy.cn/news/988260.html

相关文章

[C++笔记]二叉搜索树

BSTree.h #pragma oncenamespace key {template<class K>//这里习惯用K而不是T&#xff0c;keystruct BSTreeNode {BSTreeNode<K>* _left;BSTreeNode<K>* _right;K _key;BSTreeNode(const K& key):_left(nullptr), _right(nullptr), _key(key){}};templ…

ViT-vision transformer

ViT-vision transformer 介绍 Transformer最早是在NLP领域提出的&#xff0c;受此启发&#xff0c;Google将其用于图像&#xff0c;并对分类流程作尽量少的修改。 起源&#xff1a;从机器翻译的角度来看&#xff0c;一个句子想要翻译好&#xff0c;必须考虑上下文的信息&…

RedHat7.9安装mysql8.0.32 ↝ 二进制方式

RedHat7.9安装mysql8.0.32 ↝ 二进制方式 一、rpm方式安装1、检查是否安装了mariadb2、下载mysqlmysql8.0.323、上传解压4、创建安装目录&#xff0c;拷贝解压后的文件至安装目录/usr/local/mysql8.0/5、创建相关目录&#xff0c;开始安装6、创建mysql组和用户7、更改安装目录归…

Reinforcement Learning with Code 【Chapter 9. Policy Gradient Methods】

Reinforcement Learning with Code This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Reinforcement Learning, . 文章…

论文浅尝 | 预训练Transformer用于跨领域知识图谱补全

笔记整理&#xff1a;汪俊杰&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://arxiv.org/pdf/2303.15682.pdf 动机 传统的直推式(tranductive)或者归纳式(inductive)的知识图谱补全(KGC)模型都关注于域内(in-domain)数据&#xff0c;而比较少关…

uni-app优雅的实现时间戳转换日期格式

现在显示的格式如下图&#xff1a; 我期望统一格式&#xff0c;所以不妨前端处理一下&#xff0c;核心代码如下 filters: {// 时间戳处理formatDate: function(value, spe /) {value value * 1000let data new Date(value);let year data.getFullYear();let month data.…

[UE4][C++]调整分屏模式下(本地多玩家)视口的显示位置和区域

一、分屏模式设置 在UE4中&#xff0c;多个玩家共用一个显示器就可以启用分屏模式&#xff0c;按玩家人数&#xff08;最大四人&#xff09;将屏幕均匀分割&#xff0c;显示不同玩家的视角&#xff0c;开发者可以在编辑器里设置分割类型&#xff08;水平或者垂直&#xff09;&a…

小程序 获取用户头像、昵称、手机号的组件封装(最新版)

在父组件引入该组件 <!-- 授权信息 --><auth-mes showModal"{{showModal}}" idautnMes bind:onConfirm"onConfirm"></auth-mes> 子组件详细代码为: authMes.wxml <!-- components/authMes/authMes.wxml --> <van-popup show…