[17330] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.IO;
|
---|
| 4 | using System.Linq;
|
---|
| 5 | using System.Threading;
|
---|
| 6 | using System.Threading.Tasks;
|
---|
[18026] | 7 | using HeuristicLab.Core;
|
---|
[17330] | 8 | using HeuristicLab.Optimization;
|
---|
[17442] | 9 | using Newtonsoft.Json.Linq;
|
---|
[17330] | 10 |
|
---|
| 11 | namespace HeuristicLab.JsonInterface.App {
|
---|
| 12 | internal static class Runner {
|
---|
[17442] | 13 | internal static void Run(string template, string config, string outputFile) {
|
---|
[18045] | 14 | InstantiatorResult instantiatorResult = JsonTemplateInstantiator.Instantiate(template, config);
|
---|
| 15 | IOptimizer optimizer = instantiatorResult.Optimizer;
|
---|
[17477] | 16 |
|
---|
[18045] | 17 | optimizer.Runs.Clear();
|
---|
| 18 | if (optimizer is EngineAlgorithm e)
|
---|
| 19 | e.Engine = new ParallelEngine.ParallelEngine();
|
---|
[17519] | 20 |
|
---|
[18045] | 21 | Task task = optimizer.StartAsync();
|
---|
| 22 | while (!task.IsCompleted) {
|
---|
[18059] | 23 | WriteResultsToFile(outputFile, optimizer, instantiatorResult.RunCollectionModifiers);
|
---|
[18045] | 24 | Thread.Sleep(100);
|
---|
[17330] | 25 | }
|
---|
[18045] | 26 |
|
---|
[18059] | 27 | WriteResultsToFile(outputFile, optimizer, instantiatorResult.RunCollectionModifiers);
|
---|
[17330] | 28 | }
|
---|
| 29 |
|
---|
[18059] | 30 | private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<IRunCollectionModifier> runCollectionModifiers) {
|
---|
[18041] | 31 | if (optimizer.Runs.Count > 0)
|
---|
[18059] | 32 | File.WriteAllText(file, FetchResults(optimizer, runCollectionModifiers));
|
---|
[18041] | 33 | }
|
---|
[17330] | 34 |
|
---|
[18059] | 35 | private static string FetchResults(IOptimizer optimizer, IEnumerable<IRunCollectionModifier> runCollectionModifiers) {
|
---|
[17442] | 36 | JArray arr = new JArray();
|
---|
[18055] | 37 |
|
---|
[18059] | 38 | foreach (var modifier in runCollectionModifiers)
|
---|
| 39 | modifier.Modify(new List<IRun>(optimizer.Runs.ToArray()));
|
---|
[18055] | 40 |
|
---|
| 41 | foreach (var run in optimizer.Runs) {
|
---|
| 42 | JObject obj = new JObject();
|
---|
| 43 | arr.Add(obj);
|
---|
| 44 | obj.Add("Run", JToken.FromObject(run.ToString()));
|
---|
| 45 | foreach (var result in run.Results)
|
---|
| 46 | obj.Add(result.Key, result.Value.ToString());
|
---|
| 47 | }
|
---|
[17442] | 48 | return SingleLineArrayJsonWriter.Serialize(arr);
|
---|
[17330] | 49 | }
|
---|
| 50 | }
|
---|
| 51 | }
|
---|