Browse Source

多设备排产根据优先选择设备利用率最低去加工

yejian016332 3 years ago
parent
commit
a20dd5395b

+ 13 - 74
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/aps/instance/domain/basicdata/CandidateProcess.java

@@ -1,6 +1,9 @@
 package com.github.zuihou.business.aps.instance.domain.basicdata;
 package com.github.zuihou.business.aps.instance.domain.basicdata;
 
 
-import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
 
 
 /**
 /**
  *
  *
@@ -10,7 +13,11 @@ import java.io.Serializable;
  * @date: 2021年11月29日
  * @date: 2021年11月29日
  *
  *
  */
  */
-public class CandidateProcess implements Serializable {
+@Data
+@NoArgsConstructor
+@ToString(callSuper = true)
+@AllArgsConstructor
+public class CandidateProcess {
 	/**
 	/**
 	 * 设备编号
 	 * 设备编号
 	 */
 	 */
@@ -36,82 +43,14 @@ public class CandidateProcess implements Serializable {
 	 */
 	 */
 	private String machineName;
 	private String machineName;
 
 
-
-
 	/**
 	/**
-	 * 工艺ID
+	 * 优先级
 	 */
 	 */
-	private long procedureId;
-
-	public String getMachineName() {
-		return machineName;
-	}
-
-	public void setMachineName(String machineName) {
-		this.machineName = machineName;
-	}
-
-	public int getDuration() {
-		return duration;
-	}
-
-	public void setDuration(int duration) {
-		this.duration = duration;
-	}
-
-	public long getMachineId() {
-		return machineId;
-	}
-
-	public void setMachineId(long machineId) {
-		this.machineId = machineId;
-	}
+	private int prority;
 
 
 	/**
 	/**
-	 * @return the setupTime
-	 */
-	public double getSetupTime() {
-		return setupTime;
-	}
-
-	/**
-	 * @param setupTime
-	 *            the setupTime to set
-	 */
-	public void setSetupTime(double setupTime) {
-		this.setupTime = setupTime;
-	}
-
-	/**
-	 * @return the runTime
-	 */
-	public double getRunTime() {
-		return runTime;
-	}
-
-	/**
-	 * @param runTime
-	 *            the runTime to set
+	 * 工艺ID
 	 */
 	 */
-	public void setRunTime(double runTime) {
-		this.runTime = runTime;
-	}
-
-	public long getProcedureId() {
-		return procedureId;
-	}
-
-	public void setProcedureId(long procedureId) {
-		this.procedureId = procedureId;
-	}
+	private long procedureId;
 
 
-	@Override
-	public boolean equals(Object obj) {
-		CandidateProcess candidateProcess = (CandidateProcess)obj;
-		if(machineId == candidateProcess.getMachineId() && procedureId == candidateProcess.getProcedureId()){
-			return true;
-		}else{
-			return false;
-		}
-	}
 }
 }

+ 18 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/aps/instance/manager/AssignManager.java

@@ -43,7 +43,24 @@ public class AssignManager implements AssignManagerIface {
 			candidateProcess = candidateProcesses.get(0);
 			candidateProcess = candidateProcesses.get(0);
 		} else {
 		} else {
 			// 多于一台机床的情况(如并行机或柔性作业车间调度,每次随机取一台)
 			// 多于一台机床的情况(如并行机或柔性作业车间调度,每次随机取一台)
-			candidateProcess = candidateProcesses.get((int)(Math.random() * candidateProcesses.size()));
+//			candidateProcess = candidateProcesses.get((int)(Math.random() * candidateProcesses.size()));
+
+			// begin modify for 多机调度优化,不用随机数的方式,先找到设备利率用最低的一台设备进行分配
+			Machine bestMachine = null;
+			for(int i = 0; i < candidateProcesses.size(); i++){
+				CandidateProcess currcandidateProcess = candidateProcesses.get(i);
+				Machine currMachine = instance.getMachineMap().get("M" + currcandidateProcess.getMachineId());
+				if(null == bestMachine){
+					candidateProcess = currcandidateProcess;
+					bestMachine = currMachine;
+				}else{
+					if(currMachine.getAssignedTaskWork() < bestMachine.getAssignedTaskWork()){
+						candidateProcess = currcandidateProcess;
+						bestMachine = currMachine;
+					}
+				}
+			}
+			// end modify for 多机调度优化,不用随机数的方式,先简单根据任务个数平均分配
 			machine = instance.getMachineMap().get("M" + candidateProcess.getMachineId());
 			machine = instance.getMachineMap().get("M" + candidateProcess.getMachineId());
 		}
 		}
 		operation.setMachineId(machine.getId());
 		operation.setMachineId(machine.getId());