Rolf Egert před 5 roky
rodič
revize
7d24c2dd0e

+ 45 - 6
src/psoAlgoCode/PSO.java

@@ -24,7 +24,9 @@ import javax.swing.JTextField;
 import javax.swing.border.EmptyBorder;
 
 import api.CpsAlgorithm;
+import classes.CpsUpperNode;
 import classes.HolonObject;
+import classes.HolonSwitch;
 import ui.controller.Control;
 import ui.model.Model;
 
@@ -57,6 +59,24 @@ public class PSO implements CpsAlgorithm {
 					temp.add(obj.getElements().get(j).isActive());
 				}
 			}
+			else {
+				if(model.getObjectsOnCanvas().get(i) instanceof CpsUpperNode) {
+					CpsUpperNode tmp = (CpsUpperNode) model.getObjectsOnCanvas().get(i);
+					for( int j = 0; j < tmp.getNodes().size(); j++) {
+						/*if(tmp.getNodes().get(j) instanceof HolonSwitch){
+							HolonSwitch tmpSW = (HolonSwitch) tmp.getNodes().get(j); 
+							information.getCoord(0).addElement(tmpSW.getState())
+							;
+						}*/
+						if (tmp.getNodes().get(j) instanceof HolonObject) {
+							HolonObject obj = ((HolonObject) tmp.getNodes().get(j));
+							for (int k = 0; k < obj.getElements().size(); k++) {
+								temp.add(obj.getElements().get(k).isActive());
+							}
+						}
+					}
+				}
+			}
 		}
 		information.setCoord(temp, 1);
 		System.out.println("Information received: " + information.toString());
@@ -65,6 +85,7 @@ public class PSO implements CpsAlgorithm {
 
 	public static void applyBestConfig(Coordinate<Vector<Object>> bestConfig, Model model, Control controller) {
 		System.out.println("Applying configuration: " + bestConfig.toString());
+		System.out.println("Config size: " + bestConfig.getCoord(1).size());
 		for (int i = 0; i < model.getSwitches().size(); i++) {
 			model.getSwitches().get(i).setManualMode(true);
 			model.getSwitches().get(i).setManualState((boolean) bestConfig.getCoord(0).get(i));
@@ -76,11 +97,22 @@ public class PSO implements CpsAlgorithm {
 					((HolonObject) model.getObjectsOnCanvas().get(j)).getElements().get(h)
 							.setActive((boolean) bestConfig.getCoord(1).get(position));
 					position++;
-					
 				}
-
-			//	HolonObject tmp = (HolonObject) model.getObjectsOnCanvas().get(j);
-			//	System.out.println("object number: " + tmp.getId() + " with current state: " + tmp.getState());
+			}
+			else {
+				if(model.getObjectsOnCanvas().get(j) instanceof CpsUpperNode) {
+					CpsUpperNode tmp = (CpsUpperNode) model.getObjectsOnCanvas().get(j);
+					for( int k = 0; k < tmp.getNodes().size(); k++) {
+						if (tmp.getNodes().get(k) instanceof HolonObject) {
+							HolonObject obj = ((HolonObject) tmp.getNodes().get(k));
+							for (int l = 0; l < obj.getElements().size(); l++) {
+								obj.getElements().get(l).setActive((boolean) bestConfig.getCoord(1).get(position));
+								position++;
+
+							}
+						}
+					}
+				}
 			}
 		
 		}
@@ -293,9 +325,15 @@ public class PSO implements CpsAlgorithm {
 				
 				for(int i =0; i<nr_runs; i++) {
 				//applyBestConfig(startPos, model, controller);
+					System.out.println("Startpos size:" + startPos.getCoord(1).size() + " in " + i + " : " + startPos.toString() );
 				pso = new SimplePSO(model, controller, startPos);
+				
+				long startTime = System.currentTimeMillis();
+				
 				pso.caclSimplePSO(model, controller, startPos);
-				System.out.println("Startpos in " + i + " : " + startPos.toString() );
+				
+				long endTime = System.currentTimeMillis();
+				System.out.println("Computation time is: " + (endTime - startTime));
 				//HelpFunctions.runRepairConnections(model);
 				controller.addTextToConsole("Global best is " + pso.getGBRecord().get(Constants.MAX_ITERATION - 1));
 				//applyBestConfig(pso.getBestConfig(), model, controller);
@@ -318,7 +356,8 @@ public class PSO implements CpsAlgorithm {
 					e1.printStackTrace();
 				}
 				//if (graph.isSelected()) {
-					
+				applyBestConfig(startPos, model, controller);
+	
 				}
 				applyBestConfig(currentBestConfig, model, controller);
 				controller.addTextToConsole(

+ 37 - 1
src/psoAlgoCode/SGFunctions.java

@@ -6,6 +6,7 @@ import java.util.Vector;
 import org.omg.PortableInterceptor.NON_EXISTENT;
 
 import classes.AbstractCpsObject;
+import classes.CpsUpperNode;
 import classes.HolonElement;
 import classes.HolonObject;
 import classes.SubNet;
@@ -41,6 +42,21 @@ public class SGFunctions {
 				}
 
 			}
+			else {
+				if(model.getObjectsOnCanvas().get(j) instanceof CpsUpperNode) {
+					CpsUpperNode tmp = (CpsUpperNode) model.getObjectsOnCanvas().get(j);
+					for( int k = 0; k < tmp.getNodes().size(); k++) {
+						if (tmp.getNodes().get(k) instanceof HolonObject) {
+							HolonObject obj = ((HolonObject) tmp.getNodes().get(k));
+							for (int l = 0; l < obj.getElements().size(); l++) {
+								obj.getElements().get(l).setActive((boolean) pos.getCoord(1).get(position));
+								position++;
+
+							}
+						}
+					}
+				}
+			}
 		}
 
 	}
@@ -117,11 +133,12 @@ public class SGFunctions {
 		ArrayList<AbstractCpsObject> objList = model.getObjectsOnCanvas();
 
 		for (AbstractCpsObject obj : objList) {
+			float suppPercentage = 0;
 			if (obj instanceof HolonObject) {
 				
 				//There is no supply percentage for powerplants
 				if(!(obj.getName().contains("Plant"))) {
-					float suppPercentage = ((HolonObject) obj).getSuppliedPercentage();
+					suppPercentage = ((HolonObject) obj).getSuppliedPercentage();
 					
 					//Holon Object supply state based penalty
 					result += holonObjectSupplyPenaltyFunction(suppPercentage);
@@ -132,6 +149,25 @@ public class SGFunctions {
 					result += inactiveHolonElementPenalty((HolonObject)obj);
 		
 			}
+			else {
+				if (obj instanceof CpsUpperNode) {
+					for (AbstractCpsObject abstractCpsObject : ((CpsUpperNode) obj).getNodes()) {
+						if (abstractCpsObject instanceof HolonObject) {
+							//There is no supply percentage for powerplants
+							if(!(abstractCpsObject.getName().contains("Plant"))) {
+								suppPercentage = ((HolonObject) abstractCpsObject).getSuppliedPercentage();
+								
+								//Holon Object supply state based penalty
+								result += holonObjectSupplyPenaltyFunction(suppPercentage);
+								//result += holonObjectStatePenalty((HolonObject)obj);
+								
+							}
+								//Deactivated Holon Element penalty.
+								result += inactiveHolonElementPenalty((HolonObject)abstractCpsObject);
+						}
+					}
+				}
+			}
 			
 		}
 		

+ 1 - 1
src/psoAlgoCode/SimplePSO.java

@@ -95,7 +95,7 @@ public class SimplePSO {
 
 	public void caclSimplePSO(Model model, Control control, Coordinate<Vector<Object>> startPos) {
 		initSwarm(startPos);
-		runFunction(model, control);
+		//runFunction(model, control);
 		evaluate();
 
 		while (iterations <= Constants.MAX_ITERATION) {

+ 1 - 1
src/psoAlgoCode/Swarm.java

@@ -38,7 +38,7 @@ public class Swarm {
 
 	public void setGlobalBest(Particle new_global_best) {
 		this.global_best = new_global_best;
-		avgHemmingDistToGlobalBest();
+		//avgHemmingDistToGlobalBest();
 	}
 
 	public void updateGlobalBest(Particle new_global_best) {