public override ReplState Oparate() { var solutionPath = ResultsDirPath.CombinePathWith("BranchAndBound_" + DateTime.Now.Ticks); Directory.CreateDirectory(solutionPath); Graph.WriteToFile(solutionPath.CombinePathWith("Graph.txt")); var branchAndBoundSettings = DefaultSettings ? BranchAndBoundSettings <UpperBoundScheme> .Default : GetSettings(); var branchAndBound = new BranchAndBound <PartialGraphPartition, GraphPartitionSolution, UpperBoundScheme>(PartialGraphPartition.CreateEmpty(Graph, Random)); var killTask = DistributedInt.Init(); branchAndBound.RunAsync(GraphPartitionSolution.GenerateRandom(Graph), branchAndBoundSettings, killTask, ReportSolution(solutionPath), Random); return(new PendEndingReplState(killTask)); }
public abstract void Run(Func <Random, SolutionType> genRandom, Settings settings, DistributedInt killTask, Action <SolutionType> reportSolution, Random rnd);
public void RunAsync(Func <Random, SolutionType> genRandom, Settings settings, DistributedInt killTask, Action <SolutionType> reportSolution, Random rnd) => Task.Run(() => Run(genRandom, settings, killTask, reportSolution, rnd));
public PendEndingReplState(DistributedInt killTask) => KillTask = killTask;
static void Main(string[] args) { Colorful.Console.WriteAscii("Graph Partiton", Color.CornflowerBlue); //Repl.Create().Run(); var amountOfNodes = 24; var graph = GraphBuilder.CreateSumGraph(amountOfNodes); var bAndB = new BranchAndBound <PartialGraphPartition, GraphPartitionSolution, UpperBoundScheme>( PartialGraphPartition.CreateEmpty(graph, rnd)); bAndB.Run(GraphPartitionSolution.GenerateRandom(graph), BranchAndBoundSettings <UpperBoundScheme> .Default, DistributedInt.Init(), _ => {}, rnd); Console.WriteLine("Amount of solutions: " + bAndB.AmountOfSolutions); Console.WriteLine("Expensions: "); Console.WriteLine(bAndB.LevelExpensions.AsString()); Console.WriteLine("Cutoffs: "); Console.WriteLine(bAndB.LevelCutoffs.AsString()); }