MicroCity的一点介绍-标号法、最小费用流

2023-11-11 06:38

本文主要是介绍MicroCity的一点介绍-标号法、最小费用流,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Lua语言
  • 一、Lua简单程序
  • 二、物流信息的处理
    • 1.标号法求最短路
    • 2.最小费用流模型代码
  • 总结



Lua语言

MicroCity的脚本用的是Lua语言,提到Lua大家想到的大多是游戏的制作,然而通过MicroCity这个软件,Lua语言可以辅助进行物流信息的处理。



一、Lua简单程序

用二维数组打印1~100孪生质数

s={}
k={}
d=0 --计算李生质数组数
for i=2,100 do --判断2~100的素数isPrime = truefor a=2,i-1 doif i%a == θ thenisprime = falseendendif isPrime thenb=i+2for c=2,b-1 do--判断+2是否为质数if b%c ==0 thenisPrime = falseendendif isPrime thend=d+1 --组数, 共8组table. insert(s,i) -- 每组李生质数中较小的质数组成的数组endend
end
for e=1,d dok[e]={}for i=1,#s dok[e][1]=s[i]k[e][2]=s[1]+2print(k[e][1],"和",k[e][2],"为李生质数")endbreak 
end


二、物流信息的处理


1.标号法求最短路

标号法求解最短路的思想是运筹学中所学解决最短路问题的方法,从起点开始对各点临时标号,找到最短路后永久标号直至所有点检查完毕。

代码如下(示例):

local Links=GetControl("xian.shp")
local Points=GetControl("dian.shp")
local marked ={}     
local stpdis=  {}
local preid= {}   
local startid =24                                                      --设置起点
local endid=5                                                          --设置终点for N=1,GetRecCount(Points) do                                          --GetRecCount:获得表格记录数量 stpdis[N] = 100000000                                               --初始化各点距离为正无穷
endcrtid = startid                                                         --设置当前节点
marked[crtid]=true                                                      --标记当前点(永久标号)
stpdis[crtid]=0                                                         --初始化当前点距离为零
preid[crtid]=-1                                                         --当前点前溯节点设为-1
while crtid ~= endid do                                                 --从当前点搜索直到终点for id = 1, GetRecCount(Links) do                                   --搜索所有链接local o = GetValue(Links, "O", id)                               --分别得到各条线的三个属性local d = GetValue(Links, "D", id)local dis = GetValue(Links, "DIS", id)if o == crtid then                                               --如果与当前节点邻接tmpid =d                                                     --并且另一端点的最短距离较大if stpdis[crtid] + dis < stpdis[tmpid] then       stpdis[tmpid] = stpdis[crtid] + dis        preid[tmpid] = crtid                                      --修改另一端点的最短距离和前溯节点end   elseif d==crtid then                                             --如果与当前节点邻接tmpid =o                                                     --并且另一端点的最短距离较大if stpdis[crtid] + dis < stpdis[tmpid] then       stpdis[tmpid] = stpdis[crtid] + dis        preid[tmpid] = crtid                                      --修改另一端点的最短距离和前溯节点end   endendcrtid = endid                                                      --设置下一个当前节点for nodeid = 1,GetRecCount(Points) do                              --搜索所有节点if not marked[nodeid] and stpdis[nodeid] < stpdis[crtid] then   --找到未标记的有最小距离的节点crtid = nodeid                                             --重新设置当前节点end end  marked[crtid] = true                                               --标记新的当前节点
endlocal m={}                                                              --设置一个数组
c=endid                                                                 --将所有前溯节点存在数组里面
local i = 1
while c~=-1 do                                                          --当反推前溯节点回到-1时,结束循环m[i]=cc=preid[c]i=i+1
end
print("经过的ID为:")
while i~=1 doprint("id:",m[i-1])                                                --正向输出所有点i=i-1
endprint("最短距离:",stpdis[endid])


2.最小费用流模型

代码如下:

lp = CreateLP()
SetobjFunction(lp, {2,2,1,3,1}, "min")--各边的费用
AddConstraint(lp,{1,1,0,0,0}, "=", 3)--起点的流出
AddConstraint(lp, {-1,0,1,1,0}, "=", 0)--流出等于流入
AddConstraint(lp, {0,-1,-1,0,1},"=", 0)
AddConstraint(lp, {0,0,0,-1,-1}, "=", -3)--终点的流入
AddConstraint(lp, {1,0,0,0,0}, "<=", 4)--各点的容量
AddConstraint(lp, {0,1,0,0,0}, "<=", 2)
AddConstraint(lp, {0,0,1,0,0}, "<=", 2)
AddConstraint(lp, {0,0,0,1,0}, "<=", 3)
AddConstraint(lp, {0,0,0,0,1}, "<=", 5)
for i=1,5 dolocal W = {}for j=1,5 doif i==j thenw[j]=1elsew[j] =0endendAddConstraint(lp, w, ">=", 0)
end
SolveLP(lp)
Print("最小费用为", Getobjective(1p))
Print("1-2流量是" , GetVariable(1p,1), ",",
"1-3流量是",GetVariable(lp,2),",",
"2-3流量是",GetVariable(lp,3),",",
"2-4流量是",GetVariable(lp,4),",",
"3-4流量是",GetVariable(lp,5))

具体最小费用流问题可以用线性规划求解,缺点代码繁琐,不方便适用于各类问题,比较适合小型最小费用流模型。



总结

可以在https://microcity.github.io上更新一下MicroCity,最近更新了能在地图上用尺子工具直接量出两点的真实距离,里面也有很多伪代码和函数介绍。

这篇关于MicroCity的一点介绍-标号法、最小费用流的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388204

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强