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