《生产系统仿真应用教程PlantSimulation》周金平Johnson算法代码写错了的源代码:

isi,j,m,n,y : integer;
doy := Jobs.ydim;m := 1; n := y;for i:=1 to y loopif Jobs[7,i]<=Jobs[8,i] then -- ÄÉÈëP×éJobs[6,i] := m;m:=m+1;else  -- ÄÉÈëQ×éJobs[6,i] := n;n:=n-1;end;next;Jobs.sort(6,"up");for i:=1 to y-1 loopfor j:=i+1 to y loop          if Jobs[7,i]<=Jobs[8,i] then  -- P×éif Jobs[7,i]>Jobs[7,j] then -- µÝÔöÅÅÁÐm:=Jobs[6,i];            -- ½»»»Êý¾ÝλÖÃJobs[6,i]:=Jobs[6,j];Jobs[6,j]:=m;Jobs.sort(6,"up");end;else  -- Q×éif Jobs[8,i]<Jobs[8,j] thenm:=Jobs[6,i];Jobs[6,i]:=Jobs[6,j];Jobs[6,j]:=m;Jobs.sort(6,"up");end;end;next;next;Jobs.sort(6,"up");
end;

今晚刚编写好的正确的,能跑的代码,直接替换上述的代码(在Johnson方法里面)就行。


var i,j,m,n,y,tmp : integery := Jobs.ydimm := 1n := yfor i:=1 to y loopif Jobs[7,i]<=Jobs[8,i] then -- 纳入P组Jobs[6,i] := mm:=m+1else  --  纳入Q组Jobs[6,i] := nn:=n-1endnextm:=m-1n:=n+1print "m=",m --标记前m个数字在P组print "n=",n --标记前n个数字在Q组Jobs.sort(6,"up")for i:=1 to m loop  -- P组for  j:=1 to m-iif Jobs[7,j]>Jobs[7,j+1] then -- 递增排列tmp:=Jobs[6,j];         -- 排序Jobs[6,j]:=Jobs[6,j+1]Jobs[6,j+1]:=tmpJobs.sort(6,"up")  endnext         nextfor i:=n to y loop --Q组for j:=n to y-(i-n+1)if Jobs[8,j]<Jobs[8,j+1] then-- 递减排列tmp:=Jobs[6,j]Jobs[6,j]:=Jobs[6,j+1]Jobs[6,j+1]:=tmpJobs.sort(6,"up") endnext         nextJobs.sort(6,"up")

为什么说有问题,事出有因:
上作业:

Johnson算法:
1)列出n个作业在两台机床上的作业时间;
2)根据作业时间将n个作业分成P和Q两组。分组原则是:P组的作业在第二台机器上的加工时间比在第一台机器上加工时间长;其余作业为Q组;
3)将P组作业按他们在第一台机器上加工时间递增顺序排列,将Q组作业按他们在第二台机器上加工时间递减的顺序排列。
4)将P组作业顺序和Q组作业顺序连接在一起,构成的就是生产周期最短的最优作业顺序。

得到笔算的结果是
J4 J2 J3 J5 J1 总时长26
下面是我写的部分代码跑出来的结果:

再看看把数据放入随书代码

跑出来的结果,很明显,相同的数据随书源码跑出来的却是30,很明显错了:

先别急,你可能会好奇为什么周老师随书的数据例程的数据跑出来的答案确实是对的呢?好吧,其实是因为他的上述源代码有逻辑错误,后面的冒泡排序的时候有问题-----估计是因为他写书的时候时间紧任务大,只手写验证了他的这个例子(而他这个错误的代码偏偏能够跑出来这个特殊例子的结论!),而做作业的我刚好用另外一个例子发现他的这个错误,重新写的代码。
至于具体的错误是什么,感兴趣的话,跟着代码笔算一次就知道了,我看他的不能用,就自己写的,如果想研究就F11调试F10步进F12变量跟踪看吧。
验证我的代码正确性的方法:就是用周金平老师书上的例子跑一边,发现我写的代码的结果和书上的一样,56.

PS:
想表达一句话,什么《数据结构》代码可视化的,简直在PlantSimulation一览无遗!看着Table进行矩阵的步进,完全明白各种排序算法可视化的原因,树和图论算法导入CAD图然后看着摆好的全局变量放在图上步进算法,可视化程度简直静美得令人发指,大赞!!!

先不吐槽这个Simtalk2.0和Simtalk1.0不兼容问题让初学者看着教程打代码都不能直接运行,各种不兼容的各种难受问题,我只想说,新语法的确方便好看很多。

附上我学习PlantSimulation的笔记
好吧,其实我还有很多文件,但是不方便放上去笔记本,需要的自己找相关的线上资源,微信资源,随书教程以及QQ群文件吧。

Johnson算法PlantSimulation解决两机器多作业排版问题相关推荐

  1. 一个算法同时解决两大CV任务,让目标检测和实例分割互相帮助,地平线实习生论文被AAAI 2020收录...

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 目标检测与实例分割是计算机视觉领域重要的两个任务,近年来出现了非常多优秀的算法解决这两个问题,且都取得了优异的效果. 但是,却鲜有文章深入 ...

  2. 自动寻路算法python_关于Dijkstra算法和其他的一些图算法(Johnson, Floyd-Warshall, A*)解决最短路径问题的方法的Python实现。...

    这篇文章其实主要想说的是如何解决最短路径的问题. 其实最短路径问题,我们在生活中都在不知不觉的使用.比如我们在上网的时候,互联网传输采用了各种各样的数据包路由方法.这些路由算法都在幕后工作. 还有一些 ...

  3. 算法导论——所有点对最短路径:稀疏图Johnson算法

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.graph;import org.loda.structure.Stack; import ...

  4. 加工生产调度(Johnson算法 双机流水作业调度问题)

    加工生产调度 题目描述: 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n ...

  5. poj 2751 双机调度问题Johnson算法(贪心)

    题意: 2台机器,n件任务,每件任务必须先在S1上做,再在S2上做.任务之间先做后做任意.求最早的完工时间. 分析: 这是一个经典问题:2台机器的情况下有多项式算法(Johnson算法),3台或以上的 ...

  6. keepalived 解决入口机器(Nginx)挂掉的问题

    keepalived 解决入口机器(Nginx)挂掉的问题 问题来源 DNS 轮询解决 LVS 解决思路 keepalived 配置 LVS 过程 主机配置 从机配置 检验 keepalived 的 ...

  7. 图的最短路径算法及matlab实现(Dijkstra算法、Floyd算法、Bellman-Ford算法、Johnson 算法)

    图的最短路径算法 Dijkstra算法 Dijkstra算法研究的是从初始点到其他任一结点的最短路径,即单源最短路径问题,其对图的要求是不存在负权值的边. Dijkstra算法主要特点是以起始点为中心 ...

  8. 神经网络算法可以解决什么问题

    神经网络算法原理 4.2.1 概述. 人工神经网络的研究与计算机的研究几乎是同步发展的.1943年心理学家McCulloch和数学家Pitts合作提出了形式神经元的数学模型,20世纪50年代末,Ros ...

  9. 未能比较数组中的两个元素_算法3 寻找两个正序数组的中序数

    问题描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数.要求设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题. ...

  10. 银行家算法:解决多线程死锁问题

    死锁: 死锁产生的现场:当A进程P S2信号量而B进程P S1信号量时就会产生死锁,因为S2信号量需要B进程释放,而S1信号量需要A进程释放,因此两个进程都在等相互的资源,造成死锁. 死锁产生的条件: ...

最新文章

  1. 如何写出一个confirm组件
  2. 为何Apache下.htaccess不起作用,Linux、Windows详解
  3. SharedPreference Demo
  4. 理解三值逻辑与NULL,你离SQL高手更近了一步
  5. MySQL技术内幕:InnoDB存储引擎
  6. 破产姐妹第六季/全集2 Broke Girls迅雷下载
  7. 揭秘勒索病毒背后黑客组织:偷了官方网络武器库
  8. 2.解决Linux中文乱码问题
  9. Axure原型设计灯箱效果
  10. oom killer理解和日志分析
  11. 2020-04-08
  12. 《深入理解Android 卷III》第八章深入理解Android壁纸
  13. Excel如何给单元格加斜线
  14. 进行拨测的主要目的都有哪些?
  15. pica8公司和picOS
  16. cocos creator屏幕适配fitHeight / fitWidth,手机端竖屏,pc端浏览器适配,pc分辨率全屏适配,血条跟随的适配
  17. 魔鬼与牧师——动作分离版
  18. 三星 android 4.4.4,三星Galaxy设备什么时候升级Android 4.4.4
  19. 使用OC实现单链表:创建、删除、插入、查询、遍历、反转、合并、判断相交、求成环入口...
  20. 高新技术企业的优惠政策

热门文章

  1. 如何自己开发FreeCAD的宏插件
  2. C++之生成器(builder)模式
  3. ae效果英文版翻译对照表_AE 特效中英翻译
  4. AVOD阅读笔记(一):摘要+特征提取----Aggregate View Obeject Detection network
  5. 使用JRTPLIB收发RTP数据包
  6. HEVC—SAO技术
  7. idea weblogic 部署慢_IDEA+weblogic部署运行项目
  8. Android ListView优化总结
  9. CompoundButton调用setChecked多次触发onCheckedChanged
  10. 国内Android源码下载教程