Esempio n. 1
0
        public void SolveStory(Story story)
        {
            if (!_app.Status.isPermDone)
            {
                IPermutationCalculator permCalculator = new LocationTreeCalculator();
                _app._perm = permCalculator.Calculate(story);
                _app.Status.isPermDone = true;
            }
            if (!_app.Status.isAlignDone)
            {
                IAligner aligner = new LocationTreeAligner(_app);
                _app._segments = aligner.Align(story, _app._perm);
                _app.Status.isAlignDone = true;
            }
            if (!_app.Status.isOptimizeDone)
            {
//                _app.Status.BundleMapping = new BundleMapping(story, _app._perm, _app._segments);
//                _app.Status.Expended = new bool[_app.Status.BundleMapping.BundleCount];
                _app.Status.Optimizer = new GreedyOptimizer(_app.Status.Config, story, _app._perm, _app._segments);
                _app._position = _app.Status.Optimizer.Optimize();
                _app.Status.isOptimizeDone = true;
                MoveToPositive(story, _app._position);
            }
            if (_app.Status.isBundleMode)
            {
                _app._bundle = _app.Status.Optimizer.Optimize();
            }
            if (!_app.Status.isRelaxDone)
            {
                LineRelaxer relaxer = new LineRelaxer(_app);
                if (_app.Status.isBundleMode)
                {
                    _app._relaxedPos = relaxer.Relax(story, _app._bundle);
                }
                else
                {
                    _app._relaxedPos = relaxer.Relax(story, _app._position);
                }
                _app.Status.isRelaxDone = true;
            }
            _app._framePos = CalculateFramePos(story);
            _app.Status.isSolveDone = true;
        }
Esempio n. 2
0
        public void SolveStory(Story story)
        {
            DateTime start = DateTime.Now;
            DateTime time  = DateTime.Now;

            //GotoHellYuzuru(story);
            // Console.WriteLine(Status.isPermDone);
            // StoryVis18: Reset All Status

            // add rabbit in session 9999
            RabbitAdder.AddRabbit(story);

            SessionDeleter deleter = new SessionDeleter();

            deleter.delete(story, Status.Config.SelectedSessions);

            Grouper grouper = new Grouper();

            grouper.group(story, Status.Config.GroupIds.ToHashSet());


            IPermutationCalculator permCalculator = new LocationTreeCalculator();

            // IPermutationCalculator permCalculator = new CrossingMinimizedCalculator();
            _perm = permCalculator.Calculate(story);
            ConstraintCalculator ctrCalculator = new ConstraintCalculator(this);
            PositionTable <int>  _newPerm      = ctrCalculator.Reorder(story, _perm);

            _perm             = _newPerm;
            Status.isPermDone = true;

            //MessageBox.Show((DateTime.Now - start).ToString());
            start = DateTime.Now;

            IAligner aligner = new LocationTreeAligner(this);

            _segments          = aligner.Align(story, _perm);
            Status.isAlignDone = true;


            SessionBreaker sessionBreak = new SessionBreaker(this, story);

            sessionBreak.BreakAt(Status.Config.SessionBreaks);

            //MessageBox.Show((DateTime.Now - start).ToString());


            start = DateTime.Now;
            IOptimizer persistentOptimizer =
                new PersistentOptimizer(this, story, _perm, _segments, Status.Config.Style.DefaultInnerGap,
                                        Status.Config.Style.OuterGap);
            var position = persistentOptimizer.Optimize();

            _position = position;
            time      = DateTime.Now;
            Console.WriteLine("persistent time: {0}", time - start);
            Status.isOptimizeDone = true;
            MoveToPositive(story, _position);

            //MessageBox.Show((DateTime.Now - start).ToString());
            start = DateTime.Now;
            time  = DateTime.Now;

//            _bundle = Status.Optimizer.Optimize();

            //MessageBox.Show((DateTime.Now - start).ToString());
            //start = DateTime.Now;

            LineRelaxer relaxer = new LineRelaxer(this);

            if (Status.isBundleMode)
            {
                _relaxedPos = relaxer.Relax(story, _bundle);
            }
            else
            {
                _relaxedPos = relaxer.Relax(story, _position);
            }

            Status.isRelaxDone = true;
            //add for LOR

            //MessageBox.Show((DateTime.Now - start).ToString());
            _framePos = CalculateFramePos(story);
            Console.WriteLine(Crossing.CountCrossing(story, _perm));
            //OutputYuzuru();

            // PathOptimizer
            // PathGenerator pathGenerator = new PathGenerator();
            // List<List<Point>> paths = pathGenerator.Generate(_relaxedPos);
            // Console.WriteLine(Crossing.CountWiggle(story, _segments));
        }