Ejemplo n.º 1
0
        public PositionTable <double> Solve(Story story)
        {
            IPermutationCalculator permCalculator = new CrossingMinimizedCalculator();
            PositionTable <int>    perm           = permCalculator.Calculate(story);

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

            PositionTable <double>       position  = perm.Clone <double>();
            LongLineConstrainedOptimizer optimizer = new LongLineConstrainedOptimizer(_app);

            optimizer.Optimize(story, position, segments);


            // 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;
                    }
                }
            }

            return(position);
        }
Ejemplo n.º 2
0
        public PositionTable <double> Solve(Story story)
        {
            //IPermutationCalculator permCalculator = new EfficientBarycenterCalculator();
            IPermutationCalculator permCalculator = new CrossingMinimizedCalculator();
            PositionTable <int>    perm           = permCalculator.Calculate(story);
            PositionTable <double> position       = new PositionTable <double>(story.Characters.Count, story.TimeStamps.Length - 1);

            // transfer perm to position
            position = perm.Clone <double>();

            // new potimize
            ShortLineConstrainedOptimizer2 opt = new ShortLineConstrainedOptimizer2();

            opt.Optimize(story, position);

            // optimize
            Debug.WriteLine("Before opt, Crossing:{0}", Crossing.Count(story, position.Clone <int>()));

            PositionOptimizer3 optimizer2 = new PositionOptimizer3();
            PositionOptimizer1 optimizer1 = new PositionOptimizer1();
            PositionOptimizer2 optimizer  = new PositionOptimizer2();



            int x = 0;

            while (x-- > 0)
            {
                //position = optimizer.Optimize(story, position, 0.6, 0.2, 0.0, 0.0);
                position = optimizer2.Optimize(story, position, 1.0, 0.5, 0.0, 0.0);
                position = optimizer1.Optimize(story, position, 1.0, 0.0, 0.0, 0.0);
            }
            Debug.WriteLine("After opt, Crossing:{0}", Crossing.Count(story, position.Clone <int>()));

            // move to positive
            double min = 0;

            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;
                    }
                }
            }

            return(position);
        }