diff --git a/.gitignore b/.gitignore index fc203354b91e224985f94f3d2c17c5e1e91228b5..8dcad627a409b037defec8343932975673f556af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea/* out/* +temp_data/* Conversion.iml .idea/dictionaries/Vlad_kv.xml test/result.txt diff --git a/experiment/run.sh b/experiment/run.sh index c465356179324926d32fe10556b3285726eca033..9b78e6b4d6e18774ab76b87b07e1373fb0d1520f 100755 --- a/experiment/run.sh +++ b/experiment/run.sh @@ -1,23 +1,26 @@ #!/bin/bash -rm -f raw_result.txt -rm -f result.txt +# Путь к проекту. +PATH_TO_PROJECT="." VERSION="1" -java -classpath "../out/production/Conversion" inport.Main "to_MiniZinc_$VERSION" in.ipp "conversion_$VERSION.dzn" - -mzn2fzn --no-optimize -o model.fzn "../constraints/conversion_$VERSION.mzn" "conversion_$VERSION.dzn" -N_LINES=$(wc -l model.fzn) -echo "Model size : $N_LINES" +java -classpath "../out/production/Conversion" inport.Main "to_MiniZinc_$VERSION" $1 "$PATH_TO_PROJECT/temp_data/data.dzn" START=$(date +%s.%N) minizinc --solver Chuffed "../constraints/conversion_$VERSION.mzn" "conversion_$VERSION.dzn" >> raw_result.txt -# Gecode Chuffed + END=$(date +%s.%N) DIFF=$(echo "$END - $START" | bc) echo $DIFF java -classpath "../out/production/Conversion" inport.Main resolve_result in.ipp raw_result.txt result.txt + +/usr/lib/jvm/java-8-openjdk-amd64/bin/java +-javaagent:/home/vlad_kv/.local/share/umake/ide/idea/lib/idea_rt.jar=42623:/home/vlad_kv/.local/share/umake/ide/idea/bin +-Dfile.encoding=UTF-8 +-classpath +/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jfxswt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar:/home/vlad_kv/GitHub/Conversion/out/production/Conversion:/usr/share/java/org.sat4j.core.jar:/usr/share/java/org.sat4j.pb.jar inport.Main run experiment/in.ipp + diff --git a/src/inport/InPort.java b/src/inport/InPort.java new file mode 100644 index 0000000000000000000000000000000000000000..6e2f852ac4958c409291583ffe125e7ff8e3d324 --- /dev/null +++ b/src/inport/InPort.java @@ -0,0 +1,1583 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package inport; + +//import com.google.gson.Gson; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.math.BigInteger; +import java.util.Date; + +import org.sat4j.core.Vec; +import org.sat4j.core.VecInt; +import org.sat4j.minisat.SolverFactory; +import org.sat4j.pb.IPBSolver; +import org.sat4j.pb.OPBStringSolver; +import org.sat4j.pb.ObjectiveFunction; +import org.sat4j.pb.reader.OPBEclipseReader2007; +import org.sat4j.reader.DimacsReader; +import org.sat4j.reader.ParseFormatException; +import org.sat4j.reader.Reader; +import org.sat4j.specs.ContradictionException; +import org.sat4j.specs.IProblem; +import org.sat4j.specs.ISolver; +import org.sat4j.specs.IVec; +import org.sat4j.specs.IVecInt; +// import pbsugar.pb.PBParser; + +//import java.beans.XMLEncoder; +//import java.io.BufferedOutputStream; +//import java.io.FileNotFoundException; +//import java.io.FileOutputStream; +//import java.io.FileWriter; +//import java.io.IOException; + +/** + * + * @author topazh_ag + */ +public class InPort { + + /** + * @param args the command line arguments + */ + public static void main(String[] args) throws Exception { + +// globalTest(); + + + // Создаем новую задачу + TaskCase task = new TaskCase(); + + // Читаем ее из файла первого аргумента + task.deserialize(args[0]); + + // Подготвливаем для солвера и решаем + String fName = "task.opb"; + int nOperations = task.pb_formalize(fName); + int[] res = pbSolverDemo(fName); + + // Запись во все назначения + int nTimes = (int) (task.getPlanningInterval() + 1.0 - 1e-7); + if (res.length>1) + { + formResult(fName, res, nOperations, nTimes); + task.formSolutionFromPB(res); + task.serialize(args[0]); + } + } + + private static void globalTest() throws Exception + { + // Создаем новую задачу + TaskCase task = new TaskCase(); + + // Заполняем вручную + // fillByHandT(task); + // fillByHandT(task); + // fillByHand2(task); + // fillByHandE0(task); + + // Пишем + // task.serialize("Task.txt"); + + // Читаем обратно + task.deserialize("ippStart.ipp"); + + // И пишем в другой файл для сравнения + task.serialize("TaskCopy.txt"); + + + // Подготвливаем для солвера + String fName = "task.opb"; + // int nOperations = task.pb_formalize(fName); + int nOperations = 17; + /* + pbsugar.PBSugar solver = new pbsugar.PBSugar(); + solver.pbFileName = fName; + int variables = solver.encode(); + Set pbSolution = solver.solve(variables); + */ + + + int[] res = pbSolverDemo(fName); + + // Запись в + int nTimes = (int) (task.getPlanningInterval() + 1.0 - 1e-7); + if (res.length>1) + { + formResult(fName, res, nOperations, nTimes); + task.formSolutionFromPB(res); + task.serialize("TaskResult.txt"); + } + } + + private static void formResult(String fileName, int[] res, int nOperations, int nTimes) throws IOException + { + // Решение - в конец файла задания + FileWriter writer = new FileWriter(fileName, true); + // Решение - в отдельный файл + // FileWriter writer = new FileWriter("D:\\KSRC\\GMT_Logistics\\Planning\\results.txt", false); + writer.write("\n"); + writer.write("* Results: \n"); + writer.write("\n"); + int cVar = 0; + do + { + String clause = "Operation "+(cVar+1) + ": "; + int nSpaces = 6 - (int)(Math.log10(cVar+1)); + for (int j=0; j0) + clause += "X"; + else + clause += "-"; + } + writer.write(clause+"\n"); + cVar++; + } while (cVar7->1->6->1) + public static void fillByHandT(TaskCase task) + { + // Статические элементы + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + + // Причалы + Berth berth0 = new Berth(1, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(2, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(3, "Pier 2", false); + task.getBerths().add(berth2); + + + // Хранилища + Storage storage1 = new Storage(4, "Storage 1", 10000.0, cargo0); + task.getStorages().add(storage1); + + // Суда + TransportShip ship1 = new TransportShip(5, "Ship 1", 2000); + task.getShips().add(ship1); + TransportShip ship2 = new TransportShip(6, "Ship 2", 2000); + task.getShips().add(ship2); + + + // Шаблоны операций + + // Перемещения + //1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move101); + //2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move110); + //3 + MovingTemplate move102 = new MovingTemplate(ship1,berth0,berth2,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move102); + //4 + MovingTemplate move120 = new MovingTemplate(ship1,berth2,berth0,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move120); + //5 + MovingTemplate move112 = new MovingTemplate(ship1,berth1,berth2,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move112); + //6 + MovingTemplate move121 = new MovingTemplate(ship1,berth2,berth1,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move121); + + //7 + MovingTemplate move201 = new MovingTemplate(ship2,berth0,berth1,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move201); + //8 + MovingTemplate move210 = new MovingTemplate(ship2,berth1,berth0,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move210); + //9 + MovingTemplate move202 = new MovingTemplate(ship2,berth0,berth2,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move202); + //10 + MovingTemplate move220 = new MovingTemplate(ship2,berth2,berth0,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move220); + //11 + MovingTemplate move212 = new MovingTemplate(ship2,berth1,berth2,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move212); + //12 + MovingTemplate move221 = new MovingTemplate(ship2,berth2,berth1,1.0,7+task.getTemplates().size()); + task.getTemplates().add(move221); + + + // Погрузки + //13 + LoadingTemplate load11 = new LoadingTemplate(ship1,berth1,storage1,100.0,7+task.getTemplates().size()); + task.getTemplates().add(load11); + //14 + LoadingTemplate load12 = new LoadingTemplate(ship1,berth2,storage1,50.0,7+task.getTemplates().size()); + task.getTemplates().add(load12); + //15 + LoadingTemplate load21 = new LoadingTemplate(ship2,berth1,storage1,100.0,7+task.getTemplates().size()); + task.getTemplates().add(load21); + //16 + LoadingTemplate load22 = new LoadingTemplate(ship2,berth2,storage1,50.0,7+task.getTemplates().size()); + task.getTemplates().add(load22); + + // Начальное состояние + MovingObjectState sini1 = new MovingObjectState(ship1, berth0); + task.getVesselInitialState().add(sini1); + StorageState stini1 = new StorageState(ship1,cargo0, 0.0); + task.getStorageInitialState().add(stini1); + + MovingObjectState sini2 = new MovingObjectState(ship2, berth0); + task.getVesselInitialState().add(sini2); + StorageState stini2 = new StorageState(ship2,cargo0, 0.0); + task.getStorageInitialState().add(stini2); + + StorageState tini1 = new StorageState(storage1, cargo0, 10000.0); + task.getStorageInitialState().add(tini1); + + + // Конечное состояние + MovingObjectState send1 = new MovingObjectState(ship1, berth0); + task.getVesselEndState().add(send1); + StorageState stend1 = new StorageState(ship1,cargo0, 1000.0); + task.getStorageEndState().add(stend1); + + MovingObjectState send2 = new MovingObjectState(ship2, berth0); + task.getVesselEndState().add(send2); + StorageState stend2 = new StorageState(ship2, cargo0, 1000.0); + task.getStorageEndState().add(stend2); + + // Горизонт планирования + task.setPlanningInterval(24.0); + } + + /* + // Кейс имени Топажа с нетривиальным решением (1->7->1->6->1) и окном непогоды + public static void fillByHandTTW(TaskCase task) + { + // Статические элементы + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + + // Причалы + Berth berth0 = new Berth(0, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(1, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(2, "Pier 2", false); + task.getBerths().add(berth2); + + + // Хранилища + Storage storage1 = new Storage(1, "Storage 1", 10000.0, cargo0); + task.getStorages().add(storage1); + + // Суда + TransportShip ship1 = new TransportShip(2, "Ship 1", 2000); + task.getShips().add(ship1); + TransportShip ship2 = new TransportShip(3, "Ship 2", 2000); + task.getShips().add(ship2); + + + // Шаблоны операций + + // Перемещения + //1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(move101); + //2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move110); + //3 + MovingTemplate move102 = new MovingTemplate(ship1,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(move102); + //4 + MovingTemplate move120 = new MovingTemplate(ship1,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move120); + //5 + MovingTemplate move112 = new MovingTemplate(ship1,berth1,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(move112); + //6 + MovingTemplate move121 = new MovingTemplate(ship1,berth2,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(move121); + + //7 + MovingTemplate move201 = new MovingTemplate(ship2,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(move201); + //8 + MovingTemplate move210 = new MovingTemplate(ship2,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move210); + //9 + MovingTemplate move202 = new MovingTemplate(ship2,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(move202); + //10 + MovingTemplate move220 = new MovingTemplate(ship2,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move220); + //11 + MovingTemplate move212 = new MovingTemplate(ship2,berth1,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(move212); + //12 + MovingTemplate move221 = new MovingTemplate(ship2,berth2,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(move221); + + + // Погрузки + //13 + LoadingTemplate load11 = new LoadingTemplate(ship1,berth1,storage1,100.0,task.getTemplates().size()); + task.getTemplates().add(load11); + //14 + LoadingTemplate load12 = new LoadingTemplate(ship1,berth2,storage1,50.0,task.getTemplates().size()); + task.getTemplates().add(load12); + //15 + LoadingTemplate load21 = new LoadingTemplate(ship2,berth1,storage1,100.0,task.getTemplates().size()); + task.getTemplates().add(load21); + //16 + LoadingTemplate load22 = new LoadingTemplate(ship2,berth2,storage1,50.0,task.getTemplates().size()); + task.getTemplates().add(load22); + + TimeWindow tw = new TimeWindow(load11); + tw.getBanWindows().put(2.0,2.0); + task.getTimeWindowConstraints().add(tw); + + tw = new TimeWindow(load21); + tw.getBanWindows().put(2.0,2.0); + task.getTimeWindowConstraints().add(tw); + + tw = new TimeWindow(load12); + tw.getBanWindows().put(3.0,2.0); + task.getTimeWindowConstraints().add(tw); + + tw = new TimeWindow(load22); + tw.getBanWindows().put(3.0,2.0); + task.getTimeWindowConstraints().add(tw); + + + + // Начальное состояние + TransportShipState sini1 = new TransportShipState(0.0, ship1, berth0, false); sini1.getCargoState().put(cargo0, 0.0); + task.getVesselInitialState().add(sini1); + TransportShipState sini2 = new TransportShipState(0.0, ship2, berth0, false); sini2.getCargoState().put(cargo0, 0.0); + task.getVesselInitialState().add(sini2); + + StorageState tini1 = new StorageState(storage1, 10000.0); + task.getStorageInitialState().add(tini1); + + + // Конечное состояние + TransportShipState send1 = new TransportShipState(0.0, ship1, berth0, false); send1.getCargoState().put(cargo0, 1000.0); + task.getVesselEndState().add(send1); + TransportShipState send2 = new TransportShipState(0.0, ship2, berth0, false); send2.getCargoState().put(cargo0, 1000.0); + task.getVesselEndState().add(send2); + + // Горизонт планирования + task.setPlanningInterval(24.0); + } + */ + + /* + // Первый реальный кейс с не полностью тривиальным решением (ездят с буксиром, швартуются сами) + public static void fillByHand1(TaskCase task) + { + // Статические элементы + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + Cargo cargo1 = new Cargo(1.0, 1, "Excrement"); + task.getCargoes().add(cargo1); + + + // Причалы + Berth berth0 = new Berth(0, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(1, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(2, "Pier 2", false); + task.getBerths().add(berth2); + + + // Хранилища + Storage storage1 = new Storage(1, "Storage 1", 1000.0, cargo1); + task.getStorages().add(storage1); + Storage storage2 = new Storage(2, "Storage 2", 1000.0, cargo1); + task.getStorages().add(storage2); + + + // Буксиры + Tow tow1 = new Tow(1, "Tow 1"); + task.getTows().add(tow1); + + + // Бункеровщики + + + // Суда + TransportShip ship1 = new TransportShip(2, "Ship 1", 2000); + task.getShips().add(ship1); + TransportShip ship2 = new TransportShip(3, "Ship 2", 2000); + task.getShips().add(ship2); + + + // Шаблоны операций + + // Перемещения + // 1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,8.0,task.getTemplates().size()); + task.getTemplates().add(move101); + // 2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move110); + // 3 + MovingTemplate move101b = new MovingTemplate(ship1,berth0,berth1,1.0,task.getTemplates().size()); move101b.getResources().add(tow1); + task.getTemplates().add(move101b); + // 4 + MovingTemplate move110b = new MovingTemplate(ship1,berth1,berth0,1.0,task.getTemplates().size()); move110b.getResources().add(tow1); + task.getTemplates().add(move110b); + // 5 + MovingTemplate move102 = new MovingTemplate(ship1,berth0,berth2,8.0,task.getTemplates().size()); + task.getTemplates().add(move102); + // 6 + MovingTemplate move120 = new MovingTemplate(ship1,berth2,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move120); + // 7 + MovingTemplate move102b = new MovingTemplate(ship1,berth0,berth2,1.0,task.getTemplates().size()); move102b.getResources().add(tow1); + task.getTemplates().add(move102b); + // 8 + MovingTemplate move120b = new MovingTemplate(ship1,berth2,berth0,1.0,task.getTemplates().size()); move120b.getResources().add(tow1); + task.getTemplates().add(move120b); + // 9 + MovingTemplate move112b = new MovingTemplate(ship1,berth1,berth2,1.0,task.getTemplates().size()); move112b.getResources().add(tow1); + task.getTemplates().add(move112b); + // 10 + MovingTemplate move121b = new MovingTemplate(ship1,berth2,berth1,1.0,task.getTemplates().size()); move121b.getResources().add(tow1); + task.getTemplates().add(move121b); + + // 11 + MovingTemplate move201 = new MovingTemplate(ship2,berth0,berth1,8.0,task.getTemplates().size()); + task.getTemplates().add(move201); + // 12 + MovingTemplate move210 = new MovingTemplate(ship2,berth1,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move210); + // 13 + MovingTemplate move201b = new MovingTemplate(ship2,berth0,berth1,1.0,task.getTemplates().size()); move201b.getResources().add(tow1); + task.getTemplates().add(move201b); + // 14 + MovingTemplate move210b = new MovingTemplate(ship2,berth1,berth0,1.0,task.getTemplates().size()); move210b.getResources().add(tow1); + task.getTemplates().add(move210b); + // 15 + MovingTemplate move202 = new MovingTemplate(ship2,berth0,berth2,8.0,task.getTemplates().size()); + task.getTemplates().add(move202); + // 16 + MovingTemplate move220 = new MovingTemplate(ship2,berth2,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move220); + // 17 + MovingTemplate move202b = new MovingTemplate(ship2,berth0,berth2,1.0,task.getTemplates().size()); move202b.getResources().add(tow1); + task.getTemplates().add(move202b); + // 18 + MovingTemplate move220b = new MovingTemplate(ship2,berth2,berth0,1.0,task.getTemplates().size()); move220b.getResources().add(tow1); + task.getTemplates().add(move220b); + // 19 + MovingTemplate move212b = new MovingTemplate(ship2,berth1,berth2,1.0,task.getTemplates().size()); move212b.getResources().add(tow1); + task.getTemplates().add(move212b); + // 20 + MovingTemplate move221b = new MovingTemplate(ship2,berth2,berth1,1.0,task.getTemplates().size()); move221b.getResources().add(tow1); + task.getTemplates().add(move221b); + + // 21 + MovingTemplate moveb01 = new MovingTemplate(tow1,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb01); + // 22 + MovingTemplate moveb10 = new MovingTemplate(tow1,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb10); + // 23 + MovingTemplate moveb02 = new MovingTemplate(tow1,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb02); + // 24 + MovingTemplate moveb20 = new MovingTemplate(tow1,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb20); + // 25 + MovingTemplate moveb12b = new MovingTemplate(tow1,berth1,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb12b); + // 26 + MovingTemplate moveb21b = new MovingTemplate(tow1,berth2,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb21b); + + // Швартовки + // 27 + MooringTemplate moore11p = new MooringTemplate(ship1,berth1,1.0,true,task.getTemplates().size()); + task.getTemplates().add(moore11p); + // 28 + MooringTemplate moore11m = new MooringTemplate(ship1,berth1,1.0,false,task.getTemplates().size()); + task.getTemplates().add(moore11m); + // 29 + MooringTemplate moore12p = new MooringTemplate(ship1,berth2,1.0,true,task.getTemplates().size()); + task.getTemplates().add(moore12p); + // 30 + MooringTemplate moore12m = new MooringTemplate(ship1,berth2,1.0,false,task.getTemplates().size()); + task.getTemplates().add(moore12m); + + // 31 + MooringTemplate moore21p = new MooringTemplate(ship2,berth1,1.0,true,task.getTemplates().size()); + task.getTemplates().add(moore21p); + // 32 + MooringTemplate moore21m = new MooringTemplate(ship2,berth1,1.0,false,task.getTemplates().size()); + task.getTemplates().add(moore21m); + // 33 + MooringTemplate moore22p = new MooringTemplate(ship2,berth2,1.0,true,task.getTemplates().size()); + task.getTemplates().add(moore22p); + // 34 + MooringTemplate moore22m = new MooringTemplate(ship2,berth2,1.0,false,task.getTemplates().size()); + task.getTemplates().add(moore22m); + + // Погрузки + // 35 + LoadingTemplate load11p = new LoadingTemplate(ship1,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load11p); + // 36 + LoadingTemplate load11m = new LoadingTemplate(ship1,berth1,storage1,-200.0,task.getTemplates().size()); + task.getTemplates().add(load11m); + // 37 + LoadingTemplate load12p = new LoadingTemplate(ship1,berth2,storage2,200.0,task.getTemplates().size()); + task.getTemplates().add(load12p); + // 38 + LoadingTemplate load12m = new LoadingTemplate(ship1,berth2,storage2,-200.0,task.getTemplates().size()); + task.getTemplates().add(load12m); + // 39 + LoadingTemplate load21p = new LoadingTemplate(ship2,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load21p); + // 40 + LoadingTemplate load21m = new LoadingTemplate(ship2,berth1,storage1,-200.0,task.getTemplates().size()); + task.getTemplates().add(load21m); + // 41 + LoadingTemplate load22p = new LoadingTemplate(ship2,berth2,storage2,200.0,task.getTemplates().size()); + task.getTemplates().add(load22p); + // 42 + LoadingTemplate load22m = new LoadingTemplate(ship2,berth2,storage2,-200.0,task.getTemplates().size()); + task.getTemplates().add(load22m); + + // Начальное состояние + TransportShipState sini1 = new TransportShipState(0.0, ship1, berth0, false); sini1.getCargoState().put(cargo1, 1000.0); + task.getVesselInitialState().add(sini1); + TransportShipState sini2 = new TransportShipState(0.0, ship2, berth0, false); sini2.getCargoState().put(cargo1, 0.0); + task.getVesselInitialState().add(sini2); + MovingObjectState sini3 = new MovingObjectState(tow1,berth0); + task.getVesselInitialState().add(sini3); + StorageState tini1 = new StorageState(storage1, 200.0); + task.getStorageInitialState().add(tini1); + StorageState tini2 = new StorageState(storage2, 800.0); + task.getStorageInitialState().add(tini2); + + // Конечное состояние + TransportShipState send1 = new TransportShipState(0.0, ship1, berth0, false); send1.getCargoState().put(cargo1, 0.0); + task.getVesselEndState().add(send1); + TransportShipState send2 = new TransportShipState(0.0, ship2, berth0, false); send2.getCargoState().put(cargo1, 1000.0); + task.getVesselEndState().add(send2); + + // Горизонт планирования + task.setPlanningInterval(18.0); + } + */ + + /* + // Второй реальный кейс с не полностью тривиальным решением (ездят с буксиром, швартуются с буксиром) + public static void fillByHand1a(TaskCase task) + { + // Статические элементы + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + Cargo cargo1 = new Cargo(1.0, 1, "Excrement"); + task.getCargoes().add(cargo1); + + + // Причалы + Berth berth0 = new Berth(0, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(1, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(2, "Pier 2", false); + task.getBerths().add(berth2); + + + // Хранилища + Storage storage1 = new Storage(1, "Storage 1", 1000.0, cargo1); + task.getStorages().add(storage1); + Storage storage2 = new Storage(2, "Storage 2", 1000.0, cargo1); + task.getStorages().add(storage2); + + + // Буксиры + Tow tow1 = new Tow(1, "Tow 1"); + task.getTows().add(tow1); + + + // Бункеровщики + + + // Суда + TransportShip ship1 = new TransportShip(2, "Ship 1", 2000); + task.getShips().add(ship1); + TransportShip ship2 = new TransportShip(3, "Ship 2", 2000); + task.getShips().add(ship2); + + + // Шаблоны операций + + // Перемещения + // 1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,8.0,task.getTemplates().size()); + task.getTemplates().add(move101); + // 2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move110); + // 3 + MovingTemplate move101b = new MovingTemplate(ship1,berth0,berth1,1.0,task.getTemplates().size()); move101b.getResources().add(tow1); + task.getTemplates().add(move101b); + // 4 + MovingTemplate move110b = new MovingTemplate(ship1,berth1,berth0,1.0,task.getTemplates().size()); move110b.getResources().add(tow1); + task.getTemplates().add(move110b); + // 5 + MovingTemplate move102 = new MovingTemplate(ship1,berth0,berth2,8.0,task.getTemplates().size()); + task.getTemplates().add(move102); + // 6 + MovingTemplate move120 = new MovingTemplate(ship1,berth2,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move120); + // 7 + MovingTemplate move102b = new MovingTemplate(ship1,berth0,berth2,1.0,task.getTemplates().size()); move102b.getResources().add(tow1); + task.getTemplates().add(move102b); + // 8 + MovingTemplate move120b = new MovingTemplate(ship1,berth2,berth0,1.0,task.getTemplates().size()); move120b.getResources().add(tow1); + task.getTemplates().add(move120b); + // 9 + MovingTemplate move112b = new MovingTemplate(ship1,berth1,berth2,1.0,task.getTemplates().size()); move112b.getResources().add(tow1); + task.getTemplates().add(move112b); + // 10 + MovingTemplate move121b = new MovingTemplate(ship1,berth2,berth1,1.0,task.getTemplates().size()); move121b.getResources().add(tow1); + task.getTemplates().add(move121b); + + // 11 + MovingTemplate move201 = new MovingTemplate(ship2,berth0,berth1,8.0,task.getTemplates().size()); + task.getTemplates().add(move201); + // 12 + MovingTemplate move210 = new MovingTemplate(ship2,berth1,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move210); + // 13 + MovingTemplate move201b = new MovingTemplate(ship2,berth0,berth1,1.0,task.getTemplates().size()); move201b.getResources().add(tow1); + task.getTemplates().add(move201b); + // 14 + MovingTemplate move210b = new MovingTemplate(ship2,berth1,berth0,1.0,task.getTemplates().size()); move210b.getResources().add(tow1); + task.getTemplates().add(move210b); + // 15 + MovingTemplate move202 = new MovingTemplate(ship2,berth0,berth2,8.0,task.getTemplates().size()); + task.getTemplates().add(move202); + // 16 + MovingTemplate move220 = new MovingTemplate(ship2,berth2,berth0,8.0,task.getTemplates().size()); + task.getTemplates().add(move220); + // 17 + MovingTemplate move202b = new MovingTemplate(ship2,berth0,berth2,1.0,task.getTemplates().size()); move202b.getResources().add(tow1); + task.getTemplates().add(move202b); + // 18 + MovingTemplate move220b = new MovingTemplate(ship2,berth2,berth0,1.0,task.getTemplates().size()); move220b.getResources().add(tow1); + task.getTemplates().add(move220b); + // 19 + MovingTemplate move212b = new MovingTemplate(ship2,berth1,berth2,1.0,task.getTemplates().size()); move212b.getResources().add(tow1); + task.getTemplates().add(move212b); + // 20 + MovingTemplate move221b = new MovingTemplate(ship2,berth2,berth1,1.0,task.getTemplates().size()); move221b.getResources().add(tow1); + task.getTemplates().add(move221b); + + // 21 + MovingTemplate moveb01 = new MovingTemplate(tow1,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb01); + // 22 + MovingTemplate moveb10 = new MovingTemplate(tow1,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb10); + // 23 + MovingTemplate moveb02 = new MovingTemplate(tow1,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb02); + // 24 + MovingTemplate moveb20 = new MovingTemplate(tow1,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb20); + // 25 + MovingTemplate moveb12b = new MovingTemplate(tow1,berth1,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb12b); + // 26 + MovingTemplate moveb21b = new MovingTemplate(tow1,berth2,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb21b); + + // Швартовки + // 27 + MooringTemplate moore11p = new MooringTemplate(ship1,berth1,1.0,true,task.getTemplates().size()); moore11p.getResources().add(tow1); + task.getTemplates().add(moore11p); + // 28 + MooringTemplate moore11m = new MooringTemplate(ship1,berth1,1.0,false,task.getTemplates().size()); moore11m.getResources().add(tow1); + task.getTemplates().add(moore11m); + // 29 + MooringTemplate moore12p = new MooringTemplate(ship1,berth2,1.0,true,task.getTemplates().size()); moore12p.getResources().add(tow1); + task.getTemplates().add(moore12p); + // 30 + MooringTemplate moore12m = new MooringTemplate(ship1,berth2,1.0,false,task.getTemplates().size()); moore12m.getResources().add(tow1); + task.getTemplates().add(moore12m); + + // 31 + MooringTemplate moore21p = new MooringTemplate(ship2,berth1,1.0,true,task.getTemplates().size()); moore21p.getResources().add(tow1); + task.getTemplates().add(moore21p); + // 32 + MooringTemplate moore21m = new MooringTemplate(ship2,berth1,1.0,false,task.getTemplates().size()); moore21m.getResources().add(tow1); + task.getTemplates().add(moore21m); + // 33 + MooringTemplate moore22p = new MooringTemplate(ship2,berth2,1.0,true,task.getTemplates().size()); moore22p.getResources().add(tow1); + task.getTemplates().add(moore22p); + // 34 + MooringTemplate moore22m = new MooringTemplate(ship2,berth2,1.0,false,task.getTemplates().size()); moore22m.getResources().add(tow1); + task.getTemplates().add(moore22m); + + // Погрузки + // 35 + LoadingTemplate load11p = new LoadingTemplate(ship1,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load11p); + // 36 + LoadingTemplate load11m = new LoadingTemplate(ship1,berth1,storage1,-200.0,task.getTemplates().size()); + task.getTemplates().add(load11m); + // 37 + LoadingTemplate load12p = new LoadingTemplate(ship1,berth2,storage2,200.0,task.getTemplates().size()); + task.getTemplates().add(load12p); + // 38 + LoadingTemplate load12m = new LoadingTemplate(ship1,berth2,storage2,-200.0,task.getTemplates().size()); + task.getTemplates().add(load12m); + // 39 + LoadingTemplate load21p = new LoadingTemplate(ship2,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load21p); + // 40 + LoadingTemplate load21m = new LoadingTemplate(ship2,berth1,storage1,-200.0,task.getTemplates().size()); + task.getTemplates().add(load21m); + // 41 + LoadingTemplate load22p = new LoadingTemplate(ship2,berth2,storage2,200.0,task.getTemplates().size()); + task.getTemplates().add(load22p); + // 42 + LoadingTemplate load22m = new LoadingTemplate(ship2,berth2,storage2,-200.0,task.getTemplates().size()); + task.getTemplates().add(load22m); + + // Начальное состояние + TransportShipState sini1 = new TransportShipState(0.0, ship1, berth0, false); sini1.getCargoState().put(cargo1, 1000.0); + task.getVesselInitialState().add(sini1); + TransportShipState sini2 = new TransportShipState(0.0, ship2, berth0, false); sini2.getCargoState().put(cargo1, 0.0); + task.getVesselInitialState().add(sini2); + MovingObjectState sini3 = new MovingObjectState(tow1,berth0); + task.getVesselInitialState().add(sini3); + StorageState tini1 = new StorageState(storage1, 200.0); + task.getStorageInitialState().add(tini1); + StorageState tini2 = new StorageState(storage2, 800.0); + task.getStorageInitialState().add(tini2); + + // Конечное состояние + TransportShipState send1 = new TransportShipState(0.0, ship1, berth0, false); send1.getCargoState().put(cargo1, 0.0); + task.getVesselEndState().add(send1); + TransportShipState send2 = new TransportShipState(0.0, ship2, berth0, false); send2.getCargoState().put(cargo1, 1000.0); + task.getVesselEndState().add(send2); + + // Горизонт планирования + task.setPlanningInterval(20.0); + } + */ + + /* + // Третий реальный кейс с не полностью тривиальным решением (ездят сами, швартуются с буксиром) + public static void fillByHand1b(TaskCase task) + { + // Статические элементы + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + Cargo cargo1 = new Cargo(1.0, 1, "Excrement"); + task.getCargoes().add(cargo1); + + + // Причалы + Berth berth0 = new Berth(0, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(1, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(2, "Pier 2", false); + task.getBerths().add(berth2); + + + // Хранилища + Storage storage1 = new Storage(1, "Storage 1", 1000.0, cargo1); + task.getStorages().add(storage1); + Storage storage2 = new Storage(2, "Storage 2", 1000.0, cargo1); + task.getStorages().add(storage2); + + + // Буксиры + Tow tow1 = new Tow(1, "Tow 1"); + task.getTows().add(tow1); + + + // Бункеровщики + + + // Суда + TransportShip ship1 = new TransportShip(2, "Ship 1", 2000); + task.getShips().add(ship1); + TransportShip ship2 = new TransportShip(3, "Ship 2", 2000); + task.getShips().add(ship2); + + + // Шаблоны операций + + // Перемещения + // 1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(move101); + // 2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move110); + // 3 + MovingTemplate move101b = new MovingTemplate(ship1,berth0,berth1,8.0,task.getTemplates().size()); move101b.getResources().add(tow1); + task.getTemplates().add(move101b); + // 4 + MovingTemplate move110b = new MovingTemplate(ship1,berth1,berth0,8.0,task.getTemplates().size()); move110b.getResources().add(tow1); + task.getTemplates().add(move110b); + // 5 + MovingTemplate move102 = new MovingTemplate(ship1,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(move102); + // 6 + MovingTemplate move120 = new MovingTemplate(ship1,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move120); + // 7 + MovingTemplate move102b = new MovingTemplate(ship1,berth0,berth2,8.0,task.getTemplates().size()); move102b.getResources().add(tow1); + task.getTemplates().add(move102b); + // 8 + MovingTemplate move120b = new MovingTemplate(ship1,berth2,berth0,8.0,task.getTemplates().size()); move120b.getResources().add(tow1); + task.getTemplates().add(move120b); + // 9 + MovingTemplate move112b = new MovingTemplate(ship1,berth1,berth2,8.0,task.getTemplates().size()); move112b.getResources().add(tow1); + task.getTemplates().add(move112b); + // 10 + MovingTemplate move121b = new MovingTemplate(ship1,berth2,berth1,8.0,task.getTemplates().size()); move121b.getResources().add(tow1); + task.getTemplates().add(move121b); + + // 11 + MovingTemplate move201 = new MovingTemplate(ship2,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(move201); + // 12 + MovingTemplate move210 = new MovingTemplate(ship2,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move210); + // 13 + MovingTemplate move201b = new MovingTemplate(ship2,berth0,berth1,8.0,task.getTemplates().size()); move201b.getResources().add(tow1); + task.getTemplates().add(move201b); + // 14 + MovingTemplate move210b = new MovingTemplate(ship2,berth1,berth0,8.0,task.getTemplates().size()); move210b.getResources().add(tow1); + task.getTemplates().add(move210b); + // 15 + MovingTemplate move202 = new MovingTemplate(ship2,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(move202); + // 16 + MovingTemplate move220 = new MovingTemplate(ship2,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(move220); + // 17 + MovingTemplate move202b = new MovingTemplate(ship2,berth0,berth2,8.0,task.getTemplates().size()); move202b.getResources().add(tow1); + task.getTemplates().add(move202b); + // 18 + MovingTemplate move220b = new MovingTemplate(ship2,berth2,berth0,8.0,task.getTemplates().size()); move220b.getResources().add(tow1); + task.getTemplates().add(move220b); + // 19 + MovingTemplate move212b = new MovingTemplate(ship2,berth1,berth2,8.0,task.getTemplates().size()); move212b.getResources().add(tow1); + task.getTemplates().add(move212b); + // 20 + MovingTemplate move221b = new MovingTemplate(ship2,berth2,berth1,8.0,task.getTemplates().size()); move221b.getResources().add(tow1); + task.getTemplates().add(move221b); + + // 21 + MovingTemplate moveb01 = new MovingTemplate(tow1,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb01); + // 22 + MovingTemplate moveb10 = new MovingTemplate(tow1,berth1,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb10); + // 23 + MovingTemplate moveb02 = new MovingTemplate(tow1,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb02); + // 24 + MovingTemplate moveb20 = new MovingTemplate(tow1,berth2,berth0,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb20); + // 25 + MovingTemplate moveb12b = new MovingTemplate(tow1,berth1,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb12b); + // 26 + MovingTemplate moveb21b = new MovingTemplate(tow1,berth2,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb21b); + + // Швартовки + // 27 + MooringTemplate moore11p = new MooringTemplate(ship1,berth1,1.0,true,task.getTemplates().size()); moore11p.getResources().add(tow1); + task.getTemplates().add(moore11p); + // 28 + MooringTemplate moore11m = new MooringTemplate(ship1,berth1,1.0,false,task.getTemplates().size()); moore11m.getResources().add(tow1); + task.getTemplates().add(moore11m); + // 29 + MooringTemplate moore12p = new MooringTemplate(ship1,berth2,1.0,true,task.getTemplates().size()); moore12p.getResources().add(tow1); + task.getTemplates().add(moore12p); + // 30 + MooringTemplate moore12m = new MooringTemplate(ship1,berth2,1.0,false,task.getTemplates().size()); moore12m.getResources().add(tow1); + task.getTemplates().add(moore12m); + + // 31 + MooringTemplate moore21p = new MooringTemplate(ship2,berth1,1.0,true,task.getTemplates().size()); moore21p.getResources().add(tow1); + task.getTemplates().add(moore21p); + // 32 + MooringTemplate moore21m = new MooringTemplate(ship2,berth1,1.0,false,task.getTemplates().size()); moore21m.getResources().add(tow1); + task.getTemplates().add(moore21m); + // 33 + MooringTemplate moore22p = new MooringTemplate(ship2,berth2,1.0,true,task.getTemplates().size()); moore22p.getResources().add(tow1); + task.getTemplates().add(moore22p); + // 34 + MooringTemplate moore22m = new MooringTemplate(ship2,berth2,1.0,false,task.getTemplates().size()); moore22m.getResources().add(tow1); + task.getTemplates().add(moore22m); + + // Погрузки + // 35 + LoadingTemplate load11p = new LoadingTemplate(ship1,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load11p); + // 36 + LoadingTemplate load11m = new LoadingTemplate(ship1,berth1,storage1,-200.0,task.getTemplates().size()); + task.getTemplates().add(load11m); + // 37 + LoadingTemplate load12p = new LoadingTemplate(ship1,berth2,storage2,200.0,task.getTemplates().size()); + task.getTemplates().add(load12p); + // 38 + LoadingTemplate load12m = new LoadingTemplate(ship1,berth2,storage2,-200.0,task.getTemplates().size()); + task.getTemplates().add(load12m); + // 39 + LoadingTemplate load21p = new LoadingTemplate(ship2,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load21p); + // 40 + LoadingTemplate load21m = new LoadingTemplate(ship2,berth1,storage1,-200.0,task.getTemplates().size()); + task.getTemplates().add(load21m); + // 41 + LoadingTemplate load22p = new LoadingTemplate(ship2,berth2,storage2,200.0,task.getTemplates().size()); + task.getTemplates().add(load22p); + // 42 + LoadingTemplate load22m = new LoadingTemplate(ship2,berth2,storage2,-200.0,task.getTemplates().size()); + task.getTemplates().add(load22m); + + // Начальное состояние + TransportShipState sini1 = new TransportShipState(0.0, ship1, berth0, false); sini1.getCargoState().put(cargo1, 1000.0); + task.getVesselInitialState().add(sini1); + TransportShipState sini2 = new TransportShipState(0.0, ship2, berth0, false); sini2.getCargoState().put(cargo1, 0.0); + task.getVesselInitialState().add(sini2); + MovingObjectState sini3 = new MovingObjectState(tow1,berth0); + task.getVesselInitialState().add(sini3); + StorageState tini1 = new StorageState(storage1, 200.0); + task.getStorageInitialState().add(tini1); + StorageState tini2 = new StorageState(storage2, 800.0); + task.getStorageInitialState().add(tini2); + + // Конечное состояние + TransportShipState send1 = new TransportShipState(0.0, ship1, berth0, false); send1.getCargoState().put(cargo1, 0.0); + task.getVesselEndState().add(send1); + TransportShipState send2 = new TransportShipState(0.0, ship2, berth0, false); send2.getCargoState().put(cargo1, 1000.0); + task.getVesselEndState().add(send2); + + // Горизонт планирования + task.setPlanningInterval(18.0); + } + */ + + /* + // Тестовый вариант на заполнение всех полей + public static void fillByHand2(TaskCase task) + { + // Статические элементы + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + Cargo cargo1 = new Cargo(1.0, 1, "Excrement"); + task.getCargoes().add(cargo1); + Cargo cargo2 = new Cargo(1.0, 2, "Peaches"); + task.getCargoes().add(cargo2); + + + // Причалы + Berth berth0 = new Berth(0, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(1, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(2, "Pier 2", false); + task.getBerths().add(berth2); + + + // Хранилища + Storage storage1 = new Storage(1, "Storage 1", 1000.0, cargo1); + task.getStorages().add(storage1); + Storage storage2 = new Storage(2, "Storage 2", 1000.0, cargo2); + task.getStorages().add(storage2); + Storage storage3 = new Storage(3, "Storage 3", 1000.0, cargo0); + task.getStorages().add(storage3); + + // Оборудование + LoadingEquipment eq1 = new LoadingEquipment(1, "PeachPump 1"); + task.getEquipments().add(eq1); + LoadingEquipment eq2 = new LoadingEquipment(2, "PeachPump 2"); + task.getEquipments().add(eq2); + + + // Буксиры + Tow tow1 = new Tow(1, "Tow 1"); + task.getTows().add(tow1); + Tow tow2 = new Tow(2, "Tow 2"); + task.getTows().add(tow2); + + + // Бункеровщики + Bunker bunker1 = new Bunker(3, "Bunker 1"); + task.getBunkers().add(bunker1); + + + // Суда + TransportShip ship1 = new TransportShip(4, "Ship 1", 2000); + task.getShips().add(ship1); + TransportShip ship2 = new TransportShip(5, "Ship 2", 2000); + task.getShips().add(ship2); + + + // Шаблоны операций + + // Перемещения + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,5.0,task.getTemplates().size()); + task.getTemplates().add(move101); + MovingTemplate move201b1 = new MovingTemplate(ship2,berth0,berth2,2.0,task.getTemplates().size()); move201b1.getResources().add(tow1); + task.getTemplates().add(move201b1); + MovingTemplate move201b12 = new MovingTemplate(ship2,berth2,berth1,2.0,task.getTemplates().size()); move201b12.getResources().add(tow1); move201b12.getResources().add(tow2); + task.getTemplates().add(move201b12); + + + MovingTemplate moveb01 = new MovingTemplate(tow1,berth0,berth1,1.0,task.getTemplates().size()); + task.getTemplates().add(moveb01); + MovingTemplate movebk1 = new MovingTemplate(bunker1,berth0,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(movebk1); + + + // Швартовки + MooringTemplate moore11p = new MooringTemplate(ship1,berth1,0.2,true,task.getTemplates().size()); + task.getTemplates().add(moore11p); + MooringTemplate moore11p1b = new MooringTemplate(ship1,berth1,0.2,true,task.getTemplates().size()); moore11p1b.getResources().add(tow2); + task.getTemplates().add(moore11p1b); + + MooringTemplate moore21p = new MooringTemplate(ship2,berth2,0.5,true,task.getTemplates().size()); + task.getTemplates().add(moore21p); + MooringTemplate moore21p2b = new MooringTemplate(ship2,berth2,0.5,true,task.getTemplates().size()); moore21p2b.getResources().add(tow1); moore21p2b.getResources().add(tow2); + task.getTemplates().add(moore21p2b); + + // Погрузки + LoadingTemplate load11p = new LoadingTemplate(ship1,berth1,storage1,200.0,task.getTemplates().size()); + task.getTemplates().add(load11p); + LoadingTemplate load11m1r = new LoadingTemplate(ship1,berth1,storage1,-200.0,task.getTemplates().size()); load11m1r.getResources().add(eq1); + task.getTemplates().add(load11m1r); + LoadingTemplate load12p2r = new LoadingTemplate(ship1,berth2,storage2,10.0,task.getTemplates().size()); load12p2r.getResources().add(eq1); load11m1r.getResources().add(eq2); + task.getTemplates().add(load12p2r); + + // Бункеровки + BunkeringTemplate bunk1 = new BunkeringTemplate(ship1,berth0,null,bunker1,300.0,task.getTemplates().size()); + task.getTemplates().add(bunk1); + BunkeringTemplate bunk21 = new BunkeringTemplate(ship2,berth1,storage3,null,200.0,task.getTemplates().size()); + task.getTemplates().add(bunk21); + BunkeringTemplate bunk22 = new BunkeringTemplate(ship2,berth1,storage3,null,200.0,task.getTemplates().size()); bunk22.getResources().add(eq1); bunk22.getResources().add(eq2); + task.getTemplates().add(bunk22); + + // Внешние грузопотоки + CargoFlow cf1 = new CargoFlow(storage1); cf1.getFlow().put(0.0, -100.0); cf1.getFlow().put(1.0, -150.0); cf1.getFlow().put(2.0, 20.0); cf1.getFlow().put(3.0, 400.0); + task.getCargoFlows().add(cf1); + CargoFlow cf2 = new CargoFlow(storage2); cf2.getFlow().put(0.0, 100.0); + task.getCargoFlows().add(cf2); + + // Окна непогоды + TimeWindow tw1 = new TimeWindow(load11m1r); tw1.getBanWindows().put(5.2, 2.0); tw1.getBanWindows().put(12.6, 3.0); + task.getTimeWindowConstraints().add(tw1); + TimeWindow tw2 = new TimeWindow(moore21p2b); tw2.getBanWindows().put(3.2, 2.0); tw2.getBanWindows().put(8.3, 0.123); + task.getTimeWindowConstraints().add(tw2); + + + // Начальное состояние + TransportShipState sini1 = new TransportShipState(0.0, ship1, berth0, false); sini1.getCargoState().put(cargo1, 1000.0); + task.getVesselInitialState().add(sini1); + TransportShipState sini2 = new TransportShipState(0.0, ship2, berth0, false); sini2.getCargoState().put(cargo1, 0.0); sini2.getCargoState().put(cargo0, 130.0); + task.getVesselInitialState().add(sini2); + MovingObjectState sini3 = new MovingObjectState(tow1,berth0); + task.getVesselInitialState().add(sini3); + + StorageState tini1 = new StorageState(storage1, 200.0); + task.getStorageInitialState().add(tini1); + StorageState tini2 = new StorageState(storage2, 800.0); + task.getStorageInitialState().add(tini2); + StorageState tini3 = new StorageState(storage3, 500.0); + task.getStorageInitialState().add(tini3); + + // Конечное состояние + TransportShipState send1 = new TransportShipState(0.0, ship1, berth0, false); send1.getCargoState().put(cargo1, 0.0); send1.getCargoState().put(cargo2, 400.0); + task.getVesselEndState().add(send1); + TransportShipState send2 = new TransportShipState(0.0, ship2, berth0, false); send2.getCargoState().put(cargo1, 1000.0); send2.getCargoState().put(cargo0, 700.0); + task.getVesselEndState().add(send2); + + // Горизонт планирования + task.setPlanningInterval(520.0); + } + */ + + /// + /// Тест мобилизации средств грузообработки + /// + /// + public static void fillByHandBK(TaskCase task) + { + //Объекты + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + + + // Причалы + Berth berth0 = new Berth(1, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(2, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(3, "Pier 2", false); + task.getBerths().add(berth2); + + // Хранилища + Storage storage1 = new Storage(4, "Storage 1", 270.0, cargo0); + task.getStorages().add(storage1); + + + // Оборудование + LoadingEquipment floatingCrane = new LoadingEquipment(5, "Плавучий кран"); + task.getEquipments().add(floatingCrane); + + + // Буксиры + Tow tow1 = new Tow(6, "Tow 1"); + task.getTows().add(tow1); + + // Суда + TransportShip ship1 = new TransportShip(7, "Ship 1", 2000); + task.getShips().add(ship1); + + // Перемещения + // 1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,2.0,8+task.getTemplates().size()); move101.getResources().add(tow1); + task.getTemplates().add(move101); + // 2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,2.0,8+task.getTemplates().size()); move110.getResources().add(tow1); + task.getTemplates().add(move110); + // 3 + MovingTemplate movet20 = new MovingTemplate(tow1,berth2,berth0,2.0,8+task.getTemplates().size()); + task.getTemplates().add(movet20); + // 4 + MovingTemplate movet10 = new MovingTemplate(tow1,berth1,berth0,2.0,8+task.getTemplates().size()); + task.getTemplates().add(movet10); + // 5 + MovingTemplate movet12 = new MovingTemplate(tow1,berth1,berth2,1.0,8+task.getTemplates().size()); + task.getTemplates().add(movet12); + // 6 + MovingTemplate movek21 = new MovingTemplate(floatingCrane,berth2,berth1,2.0,8+task.getTemplates().size()); movek21.getResources().add(tow1); + task.getTemplates().add(movek21); + // 7 + LoadingTemplate lt = new LoadingTemplate(ship1,berth1,storage1,-20.0,8+task.getTemplates().size()); lt.getResources().add(floatingCrane); + task.getTemplates().add(lt); + + StorageState tini1 = new StorageState(storage1, cargo0, 0.0); + task.getStorageInitialState().add(tini1); + + // Начальное состояние + MovingObjectState sini1 = new MovingObjectState(ship1, berth0); + task.getVesselInitialState().add(sini1); + StorageState stini1 = new StorageState(ship1,cargo0, 100.0); + task.getStorageInitialState().add(stini1); + + MovingObjectState sini2 = new MovingObjectState(tow1, berth1); + task.getVesselInitialState().add(sini2); + MovingObjectState sini3 = new MovingObjectState(floatingCrane, berth2); + task.getVesselInitialState().add(sini3); + + MovingObjectState send1 = new MovingObjectState(ship1, berth0); + task.getVesselEndState().add(send1); + StorageState stend1 = new StorageState(ship1,cargo0, 0.0); + task.getStorageEndState().add(stend1); + + task.setPlanningInterval(18); + } + + /* + /// + /// Тест мобилизации средств грузообработки + /// + /// + public static void fillByHandTest(TaskCase task) + { + //Объекты + // Грузы + Cargo cargo0 = new Cargo(1.0, 0, "LNG"); + task.getCargoes().add(cargo0); + + + // Причалы + Berth berth0 = new Berth(0, "Raid", true); + task.getBerths().add(berth0); + Berth berth1 = new Berth(1, "Pier 1", false); + task.getBerths().add(berth1); + Berth berth2 = new Berth(2, "Pier 2", false); + task.getBerths().add(berth2); + + // Хранилища + Storage storage1 = new Storage(1, "Storage 1", 270.0, cargo0); + task.getStorages().add(storage1); + + + // Оборудование + LoadingEquipment floatingCrane = new LoadingEquipment(2, "Плавучий кран"); + task.getEquipments().add(floatingCrane); + + + // Буксиры + Tow tow1 = new Tow(1, "Tow 1"); + task.getTows().add(tow1); + + // Суда + TransportShip ship1 = new TransportShip(4, "Ship 1", 2000); + task.getShips().add(ship1); + + // Перемещения + // 1 + MovingTemplate move101 = new MovingTemplate(ship1,berth0,berth1,2.0,task.getTemplates().size()); move101.getResources().add(tow1); + task.getTemplates().add(move101); + // 2 + MovingTemplate move110 = new MovingTemplate(ship1,berth1,berth0,1.0,task.getTemplates().size()); move110.getResources().add(tow1); + task.getTemplates().add(move110); + // 3 + MovingTemplate movet20 = new MovingTemplate(tow1,berth2,berth0,2.0,task.getTemplates().size()); + task.getTemplates().add(movet20); + // 4 + MovingTemplate movet10 = new MovingTemplate(tow1,berth1,berth0,2.0,task.getTemplates().size()); + task.getTemplates().add(movet10); + // 5 + MovingTemplate movet12 = new MovingTemplate(tow1,berth1,berth2,1.0,task.getTemplates().size()); + task.getTemplates().add(movet12); + // 6 + MovingTemplate movek21 = new MovingTemplate(floatingCrane,berth2,berth1,2.0,task.getTemplates().size()); movek21.getResources().add(tow1); + task.getTemplates().add(movek21); + + // 7 + LoadingTemplate lt = new LoadingTemplate(ship1,berth1,storage1,100.0,task.getTemplates().size()); lt.getResources().add(floatingCrane); + task.getTemplates().add(lt); + + StorageState tini1 = new StorageState(storage1, 200.0); + task.getStorageInitialState().add(tini1); + + // Начальное состояние + TransportShipState sini1 = new TransportShipState(0.0, ship1, berth0, false); sini1.getCargoState().put(cargo0, 0.0); + task.getVesselInitialState().add(sini1); + + MovingObjectState sini2 = new MovingObjectState(tow1, berth1); + task.getVesselInitialState().add(sini2); + + MovingObjectState sini3 = new MovingObjectState(floatingCrane, berth2); + task.getVesselInitialState().add(sini3); + + TransportShipState send1 = new TransportShipState(0.0, ship1, berth0, false); send1.getCargoState().put(cargo0, 200.0); + task.getVesselEndState().add(send1); + + task.setPlanningInterval(12); + } + */ + +}