private void FlashStates() { foreach (Agent agent in agents) { AdvancedLandmarkProjectionPlaner.writeStatesToFile(agent, traces[agent]); traces[agent].ClearStates(); } }
public override void FinishPlanning(List <string> highLevelPlan) { List <string> edittedPlan = EditPlan(highLevelPlan); foreach (Agent agent in agents) { //traces[agent].plan = highLevelPlan; traces[agent].plan = edittedPlan; AdvancedLandmarkProjectionPlaner.writeStatesToFile(agent, traces[agent]); //write the leftovers AdvancedLandmarkProjectionPlaner.writeSecondHalfOfJsonToFile(agent, traces[agent]); } }
public static List <string> SolveFactored(List <Domain> lDomains, List <Problem> lProblems, ref List <Agent> m_agents, Domain joinDomain) { if (Program.highLevelPlanerType != Program.HighLevelPlanerType.ProjectionMafs) { Program.projectionVersion = Program.ProjectionVersion.NULL; } Program.Start = DateTime.Now; pdbCreationTime = 0; var lGroundedProblems = GroundProblems(lDomains, lProblems); Program.internalPlaner = Program.PlanerType.ff_toActions; BuildAgents_II buildAgents = new BuildAgents_II(lDomains, lGroundedProblems, lProblems); List <Agent> agents = buildAgents.ReturnAgents(); GetPublicPredicates(agents); List <string> lPlan = null; if (Program.highLevelPlanerType == Program.HighLevelPlanerType.Projection) { Console.WriteLine("Planning"); ShareGoals(agents); AdvancedLandmarkProjectionPlaner planner = new AdvancedLandmarkProjectionPlaner(); lPlan = planner.Plan(agents, lDomains, lProblems, joinDomain); } else { try { Program.StartHighLevelPlanning = DateTime.Now; if (Program.highLevelPlanerType == Program.HighLevelPlanerType.Landmark) { Console.WriteLine("Identifying landmarks"); bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, false); Planer_I Planner = new Planer_I(agents); Console.WriteLine("Planning"); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.PDB) { DateTime startPdbCreation = DateTime.Now; PdbPlaner.pdb = new PatternDatabase(lDomains, lProblems, agents, pdbPath); pdbCreationTime = DateTime.Now.Subtract(startPdbCreation).TotalSeconds; foreach (Agent agent in agents) { agent.InitMutex(); } Distributed_Landmarks_Detection.Reset(agents); List <Landmark> PublicAndArtificialGoals = FindPublicAndArtificialGoals(agents); PdbPlaner Planner = new PdbPlaner(agents, PublicAndArtificialGoals, PdbPlaner.pdb); Console.WriteLine("Planning"); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.ForwardHsp) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } Distributed_Landmarks_Detection.Reset(agents); PlanerHsp Planner = new PlanerHsp(agents); Console.WriteLine("Planning"); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.BackwardHsp) { bool stop = false; List <GroundedPredicate> publishPublic = new List <GroundedPredicate>(); List <GroundedPredicate> nextPublishPublic = new List <GroundedPredicate>(); foreach (Agent a in agents) { publishPublic.AddRange(a.InitBackwardHspGraph()); } bool outFlag = false; while (!stop) { stop = true; outFlag = false; foreach (Agent agent in agents) { nextPublishPublic.AddRange(agent.UpdateBackwardHspGraph(publishPublic, out outFlag)); if (outFlag) { stop = false; } } publishPublic = nextPublishPublic; } foreach (Agent agent in agents) { agent.InitMutex(); } Distributed_Landmarks_Detection.Reset(agents); // agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents); PlanerHspII Planner = new PlanerHspII(agents); Console.WriteLine("Planning"); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.LandmarkAndHsp) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, false); PlanerHspAndLandmarks Planner = new PlanerHspAndLandmarks(agents); Console.WriteLine("Planning.."); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.WeightedLandmarkAndHsp) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, false); PlanerWeightedLandmarkAndHsp Planner = new PlanerWeightedLandmarkAndHsp(agents); Console.WriteLine("Planning"); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.SophisticatedProjection) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } // agents = AdvancedLandmarkProjectionAgents.CreateProjAgents(agents, lDomains, lProblems); agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, false); PlanerHspAndLandmarks Planner = new PlanerHspAndLandmarks(agents); Console.WriteLine("Planning"); lPlan = Planner.Plan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.PDBMafs) { MapsVertex.pdb = new PatternDatabase(lDomains, lProblems, agents, pdbPath); bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } Console.WriteLine("Planning"); MapsPlanner Planner = new MapsPlanner(agents, lDomains, lProblems); Program.StartGrounding = DateTime.Now; lPlan = Planner.Plan(); } else if (Program.highLevelPlanerType == Program.HighLevelPlanerType.MafsLandmark) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, true); Console.WriteLine("Planning"); MapsPlanner Planner = new MapsPlanner(agents, lDomains, lProblems); Program.StartGrounding = DateTime.Now; lPlan = Planner.Plan(); } else if (Program.highLevelPlanerType == Program.HighLevelPlanerType.Mafsff) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, true); Console.WriteLine("Planning"); MapsPlanner Planner = new MapsPlanner(agents, lDomains, lProblems); Program.StartGrounding = DateTime.Now; lPlan = Planner.PreferableFFPlan(); } else { if (Program.highLevelPlanerType == Program.HighLevelPlanerType.ProjectionMafs) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, true); Console.WriteLine("Planning"); MapsPlanner Planner = new MapsPlanner(agents, lDomains, lProblems); Program.StartGrounding = DateTime.Now; lPlan = Planner.PreferablePlan(); } else if (Program.highLevelPlanerType == Program.HighLevelPlanerType.DistrebutedProjectionMafs) { bool stop = false; while (!stop) { stop = true; string name = ""; GroundedPredicate currentGoal = null; foreach (Agent agent in agents) { currentGoal = agent.GetGoal(); if (currentGoal != null) { stop = false; name = agent.name; break; } } if (!stop) { foreach (Agent agent in agents) { if (!agent.name.Equals(name)) { agent.ReceiveGoal(currentGoal); } } } } foreach (Agent agent in agents) { agent.InitMutex(); } agents = Distributed_Landmarks_Detection.Landmarks_Detection(agents, true); Console.WriteLine("Planning"); MapsPlanner Planner = new MapsPlanner(agents, lDomains, lProblems); Program.StartGrounding = DateTime.Now; lPlan = Planner.DistrebutedPreferablePlan(); } else { Console.WriteLine("highLevelPlanerType did not selected"); } } } } } } } } } } catch (Exception ex) { RunUtils.KillPlanners(); return(null); } } Program.End = DateTime.Now; RunUtils.KillPlanners(); m_agents = agents; return(lPlan); }
public List <string> PreferablePlan_NotdirectMessage() { highLevelPlan = new List <string>(); //List<Thread> threads = new List<Thread>(); //begin = DateTime.Now; //return null; Program.countMacro = 0.0; Program.countAvgPerMacro = 0.0; Program.sendedStateCounter = 0; Program.ffMessageCounter = 0; Program.StateExpendCounter = 0; Program.notSendedStates = 0; MapsPlanner.generateCounter = 0; Program.makeSpanPlanTime = 0.0; List <string> lplan = null; MapsAgent.InitMutex(MapsAgents); List <double> iterationTimes = null; MapsAgent.thereIsPrivate = false; foreach (MapsAgent agent in MapsAgents) { if (agent.privateActions.Count > 0) { MapsAgent.thereIsPrivate = true; } } int x = 0; while (lplan == null) { nextGlobalOpenList = new Dictionary <string, HashSet <MapsVertex> >(); foreach (MapsAgent agent in MapsAgents) { nextGlobalOpenList.Add(agent.name, new HashSet <MapsVertex>()); } iterationTimes = new List <double>(); foreach (MapsAgent agent in MapsAgents) { DateTime startTime = DateTime.Now; lplan = agent.BeginPreferablePlanning(); iterationTimes.Add(DateTime.Now.Subtract(startTime).TotalSeconds); Program.cancellationTokenSource.Token.ThrowIfCancellationRequested(); if (lplan != null) { break; } } /* bool chacking = false; * foreach (MapsAgent agent in MapsAgents) * { * if (agent.GetCountOfPreferableList() > 0) * chacking = true; * * } * foreach(HashSet<MapsVertex> l in nextGlobalOpenList.Values) * { * foreach(MapsVertex mv in l) * { * if (mv.isPreferable) * chacking = true; * } * } * Console.WriteLine(x); * if (!chacking && x != 0) * Console.WriteLine("ddd"); * x++;*/ double maxTime = iterationTimes.Max(); Program.makeSpanPlanTime += maxTime; if (lplan != null) { MapsPlanner.stop = true; break; } else { foreach (MapsAgent agent in MapsAgents) { agent.SetPublicOpenLists(nextGlobalOpenList); } } //Check if all the agents haven't found any plan, and don't have any node in their open list. //If so, end the program - we couldn't find any valid plan. bool allDone = true; foreach (MapsAgent agent in MapsAgents) { if (!agent.openIsEmpty()) { allDone = false; } } if (allDone) { MapsPlanner.stop = true; break; } } int maxAmountOfUsedDependencies = 0; foreach (MapsAgent agent in MapsAgents) { int amountOfUsedDependencies = agent.GetAmountOfUsedDependencies(); if (maxAmountOfUsedDependencies < amountOfUsedDependencies) { maxAmountOfUsedDependencies = amountOfUsedDependencies; } } Program.amountOfDependenciesUsedInPlanningProcess = maxAmountOfUsedDependencies; if (lplan != null) { //calculate amount of dependencies used: Program.amountOfDependenciesUsed = AdvancedLandmarkProjectionPlaner.CalculateAmountOfDependenciesUsedAndSaveGoldenStandardTrace(highLevelPlan, allProjectionActions, agents, null, false); } tracesHandler.FinishPlanning(highLevelPlan); return(lplan); }