SimTalk 笔记(一)————BasicKnowledge

1. 定义变量

local variable 在Method中定义
var n: integer := 1
var m: real := 1.5
var obj: object ; var str: string
global variable
//定义坐标
var x,y: real
//创建全局变量
.InformationFlow.&Variable.createObject(.Models.Frame,x,y,"Variable")

2. 注释

单行:-- 或者 //
多行:以 “/*” 开始,以 "*/" 结束

3. 特殊符号

\ --转义字符

@ --匿名标识符,指定触发该控件的MU
@.move
SimTalk的例子(Method packingControl):

if @.cont.name = "TV" 
   @.move(TVs)
   Results["TVs",1] += 1
else
   @.move(DVD_Players)
   Results["DVD_Players",1] += 1
end

? --匿名标识符, 指定物料流对象或调用方法的控件。
如下:

  • 在Source属性中选择User-defined,创建一个integer,命名为“currenttarget”,和一个method,“OnExit”
  • 创建Source的ExitControl(self.OnExit)
//.Models.Frame.Source.OnExit
@.target := ?.currenttarget

?.currenttarget += 1

if ?.currenttarget > 6 then
	?.currenttarget := 1
end	

@.move
//当Source产出第一个Entity时,currenttarget的value记为1,每产出一个新的Entity,currenttarget + 1,直到currenttarget = 6,value重置为1。

首先,需要定义五个零件和六道工序的加工时间。假设这些加工时间已经定义好了,分别为 t1, t2, t3, t4, t5 和 s1, s2, s3, s4, s5, s6。 接下来,我们需要考虑这五个零件的加工顺序。假设它们的顺序已经确定好了,分别为 A, B, C, D, E。则这五个零件的加工总时间可以表示为:t(A) + s1 + t(B) + s2 + t(C) + s3 + t(D) + s4 + t(E) + s5 + s6。 但是,我们不知道哪个零件应该先加工,哪个零件应该后加工。因此,我们需要考虑所有可能的加工顺序,并计算它们的加工总时间,最后取其中的最小值即可。 具体实现可以使用递归来完成。首先,我们定义一个函数 f,它接受两个参数,分别为当前已经加工的零件序列和已经加工的时间总和。函数 f 的返回值为所有可能的加工顺序中的最短总加工时间。 在函数 f 中,我们首先判断当前已经加工的零件序列是否包含了所有的五个零件。如果是,那么当前的时间总和就是所有零件的加工总时间,直接返回即可。 否则,我们枚举所有还没有加工的零件,分别将它们加入到当前已经加工的零件序列中,并递归调用函数 f。将返回值加上当前零件的加工时间,即得到这种加工顺序的总加工时间。最后,取所有加工顺序中的最短时间,即为所求。 以下是一个可能的实现代码: ``` PROCEDURE f(parts: ARRAY OF INTEGER; time: INTEGER): INTEGER; VAR i, j, t: INTEGER; minTime: INTEGER; BEGIN IF Length(parts) = 5 THEN // 所有零件都已经加工完成 RETURN time + t(parts[0]) + s1 + t(parts[1]) + s2 + t(parts[2]) + s3 + t(parts[3]) + s4 + t(parts[4]) + s5 + s6; ELSE // 枚举所有未加工的零件 minTime := MAXINT; FOR i := 1 TO 5 DO IF NOT (i IN parts) THEN // 将当前零件加入到已加工零件序列中 SetLength(parts, Length(parts) + 1); parts[Length(parts) - 1] := i; // 递归调用 f 函数 t := f(parts, time + t(i)); // 计算当前加工顺序的总时间 IF t < minTime THEN minTime := t; END; // 将当前零件从已加工零件序列中移除 SetLength(parts, Length(parts) - 1); END; END; RETURN minTime; END; END f; // 调用 f 函数 VAR parts: ARRAY[0..4] OF INTEGER = (0, 0, 0, 0, 0); // 初始化零件序列 minTime: INTEGER; BEGIN minTime := f(parts, 0); // 输出最短总加工时间 WRITE(minTime); END. ``` 需要注意的是,这个实现代码并没有进行任何优化,因此可能存在效率问题。如果零件数量或工序数量很大,计算时间可能会非常长。在实际应用中,可以考虑使用其他算法来优化计算效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值