コード例 #1
0
        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));
                    }
                }
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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));
                }
            }
        }