单设施选址-重心法-Matlab

news/2024/11/30 15:24:44/

单设施选址-重心法-Matlab


题目 :
有A,B,C,D四个零售点,现给出需求 W j W_{\rm{j}} Wj/(吨), a j a_{\rm{j}} aj/(每公里运费),且已知各点坐标,现要求根据四个零售店去确定一个仓库的位置。

零售点 W j W_{\rm{j}} Wj a j a_{\rm{j}} aj ( x i , y i ) ({x_i},{y_i}) (xi,yi)
A25(2,2)
B35(11,3)
C2.55(10,8)
D15(4,9)

现根据重心法定义编写matlab代码求解如下:

主函数

clc;clear all;
zuobiao=[2,2;11,3;10,8;4,9];
w=[2,3,2.5,1];
a=[5,5,5,5];
num=1;
%计算初始坐标及运费
[x0,y0,A0,dis]=new_zuobiao(zuobiao,w,a);
disp(['初始重心坐标为:(',num2str(x0),',',num2str(y0),')']);
q_yunfei=A0; %上一次计算的运费
h_yunfei=0; %迭代后计算的运费
while 1%计算迭代后的坐标及运费
[xi,yi,A,dis_i]=diedai_zuobiao(zuobiao,w,a,dis,num);
disp(['第',num2str(num),'次迭代重心坐标为:(',num2str(xi),',',num2str(yi),')']);
h_yunfei=A;
num=num+1;
dis=dis_i;
%判断是否满足运费条件
if (h_yunfei>q_yunfei)break;
end
q_yunfei=h_yunfei;
end
function [x0,y0,A0,dis]=new_zuobiao(zuobiao,w,a)
%初始化参数
n=size(zuobiao,1);
he1=zeros(n,1);
he2=zeros(n,1);
he3=zeros(n,1);
dis=zeros(n,1);
A=zeros(n,1);
%计算重心坐标
for i=1:nhe1(i)=a(i)*w(i)*zuobiao(i,1);he2(i)=a(i)*w(i);he3(i)=a(i)*w(i)*zuobiao(i,2);
end
x0=sum(he1)/sum(he2);
y0=sum(he3)/sum(he2);
%计算运距以及运费
for i=1:n
dis(i)=sqrt((x0-zuobiao(i,1))^2+(y0-zuobiao(i,2))^2);
A(i)=a(i)*w(i)*dis(i);
disp(['第',num2str(i),'个地点的初始运距:',num2str(dis(i))]);
end
A0=sum(A);
disp(['初始运费:',num2str(A0)]);
end
function [xi,yi,A,dis_i]=diedai_zuobiao(zuobiao,w,a,dis,num)
%初始化参数
n=size(zuobiao,1);
he1=zeros(n,1);
he2=zeros(n,1);
he3=zeros(n,1);
dis_i=zeros(n,1);
Ai=zeros(n,1);
%计算迭代后的坐标
for i=1:nhe1(i)=a(i)*w(i)*zuobiao(i,1)/dis(i);he2(i)=a(i)*w(i)/dis(i);he3(i)=a(i)*w(i)*zuobiao(i,2)/dis(i);
end
xi=sum(he1)/sum(he2);
yi=sum(he3)/sum(he2);
%计算运距以及运费
for j=1:n
dis_i(j)=sqrt((xi-zuobiao(j,1))^2+(yi-zuobiao(j,2))^2);
Ai(j)=a(j)*w(j)*dis_i(j);
disp(['第',num2str(j),'个地点第',num2str(num),'次迭代运距:',num2str(dis_i(j))]);
end
A=sum(Ai);
disp(['第',num2str(num),'次迭代运费:',num2str(A)]);
end

运算迭代43次后结果如下:
在这里插入图片描述


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

相关文章

JAVA 进阶

Java继承,多态,接口,异常 Java进阶之子类与继承 继承:让类与类之间产生关系,子类可以直接使用父类中非私有的成员‘ 格式 ;public class 子类名 extends 父类名{}fu; 是父类的意思;也被叫做基…

Hi-C 测序技术(图解详解)

文章目录 一、介绍二、原理及步骤三、三维基因组检测技术比较1、C技术3C(一对一)4C(一对多)5C(多对多)Hi-C(全部互作) 2、基于免疫沉淀技术ChIP-loopChIA-PET 四、总结 一、介绍 Hi…

IHE简介

一、 IHE是什么? IHE概念是由医学专家和广大医护工作者、相关政府部门、信息技术专家和企业共同发起的,目的是提供一种更好的方法让医学计算机系统之间更好地共享信息。IHE强化了一些已有的通讯标准,比如DICOM和HL7之间的协同工作&#xff0…

synchronized(this)和synchronized(.class)的理解

synchronized(this)和synchronized(.class)的理解 synchronized(this)验证:同一对象的Thread(苇名一心):不同对象的Thread(苇名一心和苇名弦一郎&…

Hive 1

简介 hive是使用SQL完成大数据统计分析的工具。 hive是facebook公司开源的工具,用来解决海量的结构化日志的统计问题。 hive是构建在hadoop之上的数据仓库。 HDFS: hive的 数据是放在HDFS (distributed storge), 元数据(metadata)存在对应的底层关系型…

python第三方库pygame的使用

作用:pygame一般用来做游戏 注意:1.在使用pygame提供的功能之前,需要调用init方法 2.在游戏结束前需要调用 quit 方法 pygame中的各个函数: 1.pygame.init():该函数在使用pygame时进行初始化,只有引用了该…

BUU[SCTF2019]Who is he

unity 用dnspy打开Assembly-CSharp.dll,分析主要加密 分析加密函数,DES加密(key和vi一样),和Base64 根据已知数据解密 ,但是在C#中,字符串默认是Unicode字符串,所以转成字节数组&am…

Qt自定义控件-坐标原点位置变化

1、qt界面默认绘制坐标是从左上角为原点进行绘制的,如下图所示: 2、重新设置原点位置 利用painter.translate函数将原点位置控制到指定位置 例如:先绘制一个矩形,然后将矩形的中心点作为原点再画直线 void paintEvent(QPaintEve…