├── README.md ├── AGV.py ├── FS_Job.py ├── JS_Job.py └── Machine.py /README.md: -------------------------------------------------------------------------------- 1 | # Shop_Floor_Item 2 | this repo is use to share item of Shop Floor 3 | -------------------------------------------------------------------------------- /AGV.py: -------------------------------------------------------------------------------- 1 | 2 | class AGV: 3 | def __init__(self,idx): 4 | self.idx=idx 5 | self.trace=[0] 6 | self.using_time=[] 7 | self._on=[] 8 | self.Current_Site=0 9 | self.start=0 10 | self.end=0 11 | 12 | def send_to(self,site,s,t,load=None): 13 | self.start=s 14 | self.end=self.start+t 15 | self.using_time.append([self.start,self.end]) 16 | self._on.append(load) 17 | self.Current_Site=site 18 | self.trace.append(site) -------------------------------------------------------------------------------- /FS_Job.py: -------------------------------------------------------------------------------- 1 | import copy 2 | 3 | class Job: 4 | def __init__(self,idx,handling_time): 5 | self.index=idx 6 | self.handling_time=copy.copy(handling_time) 7 | self.start=0 8 | self.end=0 9 | self.total_PT=sum(handling_time) 10 | self.Cur_processed=0 11 | self.Cur_PT=None 12 | self.Cur_site=0 13 | self.J=False 14 | self.arrive=0 15 | 16 | def finish(self): 17 | self.Cur_processed+=self.handling_time[0] 18 | del self.handling_time[0] 19 | 20 | def handling(self,start): 21 | self.start=start 22 | self.Cur_PT=self.handling_time[0] 23 | self.end=self.start+ self.Cur_PT 24 | 25 | def judge_wether_end(self): 26 | if self.J: 27 | return False 28 | else: 29 | return True 30 | 31 | def next_machine(self): 32 | return self.Cur_site+1 -------------------------------------------------------------------------------- /JS_Job.py: -------------------------------------------------------------------------------- 1 | from Env.Flow_Shop_Environment.FS_Job import Job 2 | import copy 3 | 4 | class Job(Job): 5 | def __init__(self,idx,handling_time,handling_machine): 6 | super().__init__(idx,handling_time) 7 | self.handling_machine=copy.copy(handling_machine) 8 | 9 | def finish(self): 10 | self.Cur_processed+=self.handling_time[0] 11 | del self.handling_time[0] 12 | 13 | def update_site(self): 14 | self.Cur_site=self.handling_machine[0] 15 | 16 | def judge_wether_end(self): 17 | if len(self.handling_machine)==1 or self.handling_machine==[]: 18 | self.J=True 19 | return False 20 | else: 21 | return True 22 | 23 | def finished_move(self): 24 | del self.handling_machine[1] 25 | if self.handling_machine==[] or len(self.handling_machine)==1: 26 | self.J = True 27 | 28 | def next_machine(self): 29 | return self.handling_machine[1] 30 | 31 | -------------------------------------------------------------------------------- /Machine.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | class Machine: 4 | def __init__(self,idx): 5 | self.index=idx 6 | self.IB=[] #输入缓冲区 7 | self.OB=[] #输出缓冲区 8 | self.Processed=[] 9 | self.using_time=[] 10 | self.arrive=[] 11 | self.start=0 12 | self.end=0 13 | 14 | def handling(self,job): 15 | st=self.arrive[self.IB.index(job)] 16 | del self.arrive[self.IB.index(job)] 17 | if st<=self.end: 18 | job.handling(self.end) 19 | else: 20 | job.handling(st) 21 | self.end=job.end 22 | self.IB.remove(job) 23 | self.OB.append(job) 24 | job.finish() 25 | self.using_time.append([job.start,job.end]) 26 | self.Processed.append(job.index) 27 | 28 | def put_into_job(self,job,arrive_t): 29 | self.arrive.append(arrive_t) 30 | self.IB.append(job) 31 | 32 | def sequence_handling(self,t): 33 | Ji=0 34 | if self.IB!=[]: 35 | while Ji