Example #1
0
        public PositionTable <double> Solve(Story story)
        {
            DateTime time = DateTime.Now;

            //IPermutationCalculator permCalculator = new LocationSensitiveCalculator();
            IPermutationCalculator permCalculator = new LocationTreeCalculator();
            PositionTable <int>    perm           = permCalculator.Calculate(story);

            Console.WriteLine(">>>Perm Time Consuming:{0}", DateTime.Now - time);
            time = DateTime.Now;

            IAligner            aligner  = new LocationTreeAligner(_app);
            PositionTable <int> segments = aligner.Align(story, perm);

            Console.WriteLine(">>>Align Time Consuming:{0}", DateTime.Now - time);
            time = DateTime.Now;

            _app.Status.Optimizer = new GreedyOptimizer(_app.Status.Config, story, perm, segments);
            PositionTable <double> position = _app.Status.Optimizer.Optimize();

            Console.WriteLine(">>>Optimize Time Consuming:{0}", DateTime.Now - time);
            time = DateTime.Now;



            // move to positive
            double min = int.MaxValue;

            for (int id = 0; id < story.Characters.Count; ++id)
            {
                for (int frame = 0; frame < story.TimeStamps.Length - 1; ++frame)
                {
                    if (story.SessionTable[id, frame] != -1 && min > position[id, frame])
                    {
                        min = position[id, frame];
                    }
                }
            }

            for (int id = 0; id < story.Characters.Count; ++id)
            {
                for (int frame = 0; frame < story.TimeStamps.Length - 1; ++frame)
                {
                    if (story.SessionTable[id, frame] != -1)
                    {
                        position[id, frame] -= min;
                        position[id, frame] *= 1;
                    }
                }
            }

            Console.WriteLine("Location Tree Crossing:{0}", Crossing.Count(story, perm));

            return(position);
        }
Example #2
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;
        }
Example #3
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));
        }