Переглянути джерело

排产算法时间片计算问题修改

yejian 3 роки тому
батько
коміт
2b1548e778

+ 2 - 2
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/aps/algorithm/ga/GAScheduler.java

@@ -53,11 +53,11 @@ public class GAScheduler {
 		try {
 			for (int runTime = 1; runTime <= runTimes; runTime++) {
 				Engine<IntegerGene, Double> engine = Engine.builder(this.problem).executor(Runnable::run)
-						.optimize(Optimize.MINIMUM).populationSize(100).selector(new RouletteWheelSelector<>())
+						.optimize(Optimize.MINIMUM).populationSize(10).selector(new RouletteWheelSelector<>())
 						.alterers(new Mutator<>(0.2), new SinglePointCrossover<>(0.9)).build();
 
 				Phenotype<IntegerGene, Double> best = engine.stream()
-						.limit(500)
+						.limit(100)
 						.peek(r -> System.out.println( DateUtil.format(new Date(r.getGeneration()),"yyyy-MM-dd HH:mm:ss") + " : " + r.getBestPhenotype()))
 						.collect(EvolutionResult.toBestPhenotype());
 				results.add(best.getFitness());

+ 6 - 6
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/aps/instance/domain/basicdata/Operation.java

@@ -94,11 +94,11 @@ public class Operation implements Serializable {
 	/**
 	 * 开始
 	 */
-	private Date expectStartTime;
+	private String expectStartTime;
 	/**
 	 * 结束
 	 */
-	private Date expectEndTime;
+	private String expectEndTime;
 	/**
 	 * 计划数,默认为1
 	 */
@@ -394,19 +394,19 @@ public class Operation implements Serializable {
 		this.earlyEndTime = earlyEndTime;
 	}
 
-	public Date getExpectStartTime() {
+	public String getExpectStartTime() {
 		return expectStartTime;
 	}
 
-	public void setExpectStartTime(Date expectStartTime) {
+	public void setExpectStartTime(String expectStartTime) {
 		this.expectStartTime = expectStartTime;
 	}
 
-	public Date getExpectEndTime() {
+	public String getExpectEndTime() {
 		return expectEndTime;
 	}
 
-	public void setExpectEndTime(Date expectEndTime) {
+	public void setExpectEndTime(String expectEndTime) {
 		this.expectEndTime = expectEndTime;
 	}
 

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

@@ -7,6 +7,7 @@ import com.github.zuihou.business.aps.instance.manager.iface.AssignManagerIface;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.util.Date;
 import java.util.List;
 import java.util.TreeSet;
 
@@ -51,7 +52,10 @@ public class AssignManager implements AssignManagerIface {
 		if (machine.getQueueList().size() == 0) {
 			// 计划开始为最早开始
 			operation.setStart(operation.getEarlyStart());
-			operation.setFinish(DateUtil.offsetMinute(new DateTime(DateUtil.current(false)),new Long(candidateProcess.getDuration()).intValue()).getTime());
+			operation.setFinish(DateUtil.offsetMinute(new DateTime(operation.getStart()),new Long(candidateProcess.getDuration()).intValue()).getTime());
+			operation.setExpectStartTime(DateUtil.format(new Date(operation.getStart()),"yyyy-MM-dd HH:mm:ss"));
+			operation.setExpectEndTime(DateUtil.format(new Date(operation.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
 		} else {
 			findMachineSpace(operation, candidateProcess, machine,instance.getCalcBeginDate(), insert);
 		}
@@ -120,6 +124,10 @@ public class AssignManager implements AssignManagerIface {
 			finish = start + workTime;
 			operation.setStart(start);
 			operation.setFinish(finish);
+
+			operation.setExpectStartTime(DateUtil.format(new Date(operation.getStart()),"yyyy-MM-dd HH:mm:ss"));
+			operation.setExpectEndTime(DateUtil.format(new Date(operation.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
 			return true;
 		}
 		if (latterOp.getStart() < operation.getFinish()) {
@@ -129,6 +137,10 @@ public class AssignManager implements AssignManagerIface {
 		if (latterOp.getStart() - start >= workTime) {
 			operation.setStart(start);
 			operation.setFinish(start + workTime);
+
+			operation.setExpectStartTime(DateUtil.format(new Date(operation.getStart()),"yyyy-MM-dd HH:mm:ss"));
+			operation.setExpectEndTime(DateUtil.format(new Date(operation.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
 			return true;
 		} else {
 			return false;
@@ -154,6 +166,11 @@ public class AssignManager implements AssignManagerIface {
 		Operation latterOp = null;
 		tempOp.setStart(earlyStart);
 		tempOp.setFinish(earlyFinish);
+
+		tempOp.setExpectStartTime(DateUtil.format(new Date(tempOp.getStart()),"yyyy-MM-dd HH:mm:ss"));
+		tempOp.setExpectEndTime(DateUtil.format(new Date(tempOp.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
+
 		int findIndex = 0;
 		// 只有需要插空时才寻找空隙
 		if (insert) {
@@ -163,6 +180,11 @@ public class AssignManager implements AssignManagerIface {
 					Operation virOp = new Operation();
 					virOp.setStart(calcBeginDate);
 					virOp.setFinish(calcBeginDate);
+
+					virOp.setExpectStartTime(DateUtil.format(new Date(virOp.getStart()),"yyyy-MM-dd HH:mm:ss"));
+					virOp.setExpectEndTime(DateUtil.format(new Date(virOp.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
+
 					formerOp = virOp;
 					latterOp = machine.getQueueList().first();
 				}
@@ -170,11 +192,19 @@ public class AssignManager implements AssignManagerIface {
 				if (!findSpace) {
 					tempOp.setStart(latterOp.getFinish() > earlyStart ? latterOp.getFinish() : earlyStart);
 					tempOp.setFinish(DateUtil.offsetMinute(new DateTime(tempOp.getStart()),new Double(candidateProcess.getDuration()).intValue()).getTime());
+
+					tempOp.setExpectStartTime(DateUtil.format(new Date(tempOp.getStart()),"yyyy-MM-dd HH:mm:ss"));
+					tempOp.setExpectEndTime(DateUtil.format(new Date(tempOp.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
+
 					formerOp = latterOp;
 					latterOp = machine.getQueueList().higher(latterOp);
 				} else {
 					operation.setStart(tempOp.getStart());
 					operation.setFinish(DateUtil.offsetMinute(new DateTime(operation.getStart()),new Double(candidateProcess.getDuration()).intValue()).getTime());
+					operation.setExpectStartTime(DateUtil.format(new Date(operation.getStart()),"yyyy-MM-dd HH:mm:ss"));
+					operation.setExpectEndTime(DateUtil.format(new Date(operation.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
 				}
 				findIndex++;
 			}
@@ -185,6 +215,9 @@ public class AssignManager implements AssignManagerIface {
 					: operation.getEarlyStart();
 			operation.setStart(startTime);
 			operation.setFinish(DateUtil.offsetMinute(new DateTime(startTime),new Double(candidateProcess.getDuration()).intValue()).getTime());
+			operation.setExpectStartTime(DateUtil.format(new Date(operation.getStart()),"yyyy-MM-dd HH:mm:ss"));
+			operation.setExpectEndTime(DateUtil.format(new Date(operation.getFinish()),"yyyy-MM-dd HH:mm:ss"));
+
 		}
 	}