private void CalculateSwitchCosts() { int rooms = Model.rooms.Count; for (int index = 0; index < rooms; index++) { for (int secondindex = index + 1; secondindex < rooms; secondindex++) { _Room r1 = Model.rooms.ElementAt(index); _Room r2 = Model.rooms.ElementAt(secondindex); _Model tempModel = Model.DeepCopy(r1, r2, out _Room r1target, out _Room r2target); tempModel.SwitchRooms(ref r1target, ref r2target); if (tempModel.IsInInvalidState) { continue; } Cost cost = CostCalculationService.CalculateCostNew(tempModel); lock (locker) { Actions.Add(new Switch(ref r1, ref r2, cost)); } } } }
public void RunSteps() { st.Start(); while (exitCondition == ExitCondition.Running) { Actions.Clear(); DoorActions.Clear(); SaveState(); actualCost = CostCalculationService.CalculateCostNew(Model); actualCost.Index = CurrentIndex; CalculateCostsForState(); bool m = Model.IsInInvalidState; MakeAStepByTheCalculatedCosts(); //CalculateDoorCosts(); //MakeStepByDoorChanges(); HandleModelChangeUpdate(); if (CurrentIndex >= MaxIndex) { exitCondition = ExitCondition.isFinished; } if (st.ElapsedMilliseconds > maxSeconds * 1000) { exitCondition = ExitCondition.isTimeout; } if (ActualTreshold >= MaxTreshold) { exitCondition = ExitCondition.isTreshold; } CurrentIndex++; Thread.Sleep(5); } Logger.WriteLog($"Run Ended.\nExitCondition : {exitCondition}"); exitCondition = ExitCondition.Running; ActualTreshold = 0; MaxIndex += MaxIndex; st.Reset(); }
private void CalculateMoveCosts() { List <_Line> allLinesFlat = Model.AllLinesFlat(); for (int index = 0; index < allLinesFlat.Count; index++) { _Line myLine = allLinesFlat.ElementAt(index); _Model tempModel = Model.DeepCopy(myLine, out _Line newMyLine); tempModel.MoveLine(baseMoveDistance, newMyLine); if (tempModel.IsInInvalidState) { continue; } Cost costsnew = CostCalculationService.CalculateCostNew(tempModel); lock (locker) { Actions.Add(new Move(myLine, costsnew, baseMoveDistance)); } } for (int index = 0; index < allLinesFlat.Count; index++) { _Line myLine = allLinesFlat.ElementAt(index); _Model tempModel = Model.DeepCopy(myLine, out _Line newMyLine); tempModel.MoveLine(-baseMoveDistance, newMyLine); if (tempModel.IsInInvalidState) { continue; } Cost costsnew = CostCalculationService.CalculateCostNew(tempModel); lock (locker) { Actions.Add(new Move(myLine, costsnew, -baseMoveDistance)); } } }