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