[17330] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.IO;
|
---|
| 4 | using System.Linq;
|
---|
| 5 | using System.Text;
|
---|
| 6 | using System.Threading;
|
---|
| 7 | using System.Threading.Tasks;
|
---|
| 8 | using HeuristicLab.Optimization;
|
---|
[17453] | 9 | using HeuristicLab.ParallelEngine;
|
---|
[17464] | 10 | using HeuristicLab.Problems.DataAnalysis.Symbolic;
|
---|
| 11 | using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
|
---|
[17439] | 12 | using HeuristicLab.SequentialEngine;
|
---|
[17442] | 13 | using Newtonsoft.Json.Linq;
|
---|
[17330] | 14 |
|
---|
| 15 | namespace HeuristicLab.JsonInterface.App {
|
---|
| 16 | internal static class Runner {
|
---|
[17442] | 17 | internal static void Run(string template, string config, string outputFile) {
|
---|
[17519] | 18 | try {
|
---|
| 19 | InstantiatorResult instantiatorResult = JsonTemplateInstantiator.Instantiate(template, config);
|
---|
| 20 | IOptimizer optimizer = instantiatorResult.Optimizer;
|
---|
| 21 | IEnumerable<IResultJsonItem> configuredResultItem = instantiatorResult.ConfiguredResultItems;
|
---|
[17477] | 22 |
|
---|
[17519] | 23 | optimizer.Runs.Clear();
|
---|
| 24 | if (optimizer is EngineAlgorithm e)
|
---|
| 25 | e.Engine = new ParallelEngine.ParallelEngine();
|
---|
| 26 |
|
---|
| 27 | Task task = optimizer.StartAsync();
|
---|
| 28 | while (!task.IsCompleted) {
|
---|
| 29 | WriteResultsToFile(outputFile, optimizer, configuredResultItem);
|
---|
| 30 | Thread.Sleep(100);
|
---|
| 31 | }
|
---|
| 32 |
|
---|
[17477] | 33 | WriteResultsToFile(outputFile, optimizer, configuredResultItem);
|
---|
[17519] | 34 | } catch (Exception e) {
|
---|
[17828] | 35 | Console.Error.WriteLine($"{e.Message} \n\n\n\n {e.StackTrace}");
|
---|
[17519] | 36 | File.WriteAllText(outputFile, e.Message + "\n\n\n\n" + e.StackTrace);
|
---|
[17828] | 37 | Environment.Exit(-1);
|
---|
[17330] | 38 | }
|
---|
| 39 | }
|
---|
| 40 |
|
---|
[17477] | 41 | private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItem) =>
|
---|
| 42 | File.WriteAllText(file, FetchResults(optimizer, configuredResultItem));
|
---|
[17330] | 43 |
|
---|
[17477] | 44 | private static string FetchResults(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItem) {
|
---|
[17442] | 45 | JArray arr = new JArray();
|
---|
[17477] | 46 | IEnumerable<string> configuredResults = configuredResultItem.Select(x => x.Name);
|
---|
| 47 |
|
---|
[17395] | 48 | foreach (var run in optimizer.Runs) {
|
---|
[17442] | 49 | JObject obj = new JObject();
|
---|
| 50 | arr.Add(obj);
|
---|
| 51 | obj.Add("Run", JToken.FromObject(run.ToString()));
|
---|
[17560] | 52 |
|
---|
| 53 | // add empty values for configured results
|
---|
| 54 | var emptyToken = JToken.FromObject("");
|
---|
| 55 | foreach (var cr in configuredResults) {
|
---|
| 56 | obj.Add(cr, emptyToken);
|
---|
| 57 | }
|
---|
| 58 |
|
---|
| 59 | // change empty values with calculated values
|
---|
| 60 | var formatter = new SymbolicDataAnalysisExpressionMATLABFormatter();
|
---|
[17395] | 61 | foreach (var res in run.Results) {
|
---|
[17560] | 62 | if(obj.ContainsKey(res.Key)) {
|
---|
[17464] | 63 | if (res.Value is ISymbolicRegressionSolution solution) {
|
---|
[17560] | 64 | var formattedModel = formatter.Format(solution.Model.SymbolicExpressionTree);
|
---|
| 65 | obj[res.Key] = JToken.FromObject(formattedModel);
|
---|
| 66 | } else {
|
---|
| 67 | obj[res.Key] = JToken.FromObject(res.Value.ToString());
|
---|
| 68 | }
|
---|
[17464] | 69 | }
|
---|
[17330] | 70 | }
|
---|
[17395] | 71 | }
|
---|
[17442] | 72 | return SingleLineArrayJsonWriter.Serialize(arr);
|
---|
[17330] | 73 | }
|
---|
| 74 | }
|
---|
| 75 | }
|
---|