From a6cc0aeb14185547a590415d99d4d20630f7f2d4 Mon Sep 17 00:00:00 2001 From: Declan Taylor Date: Wed, 20 Nov 2019 11:11:51 +0000 Subject: [PATCH] Changes Created new console app, refactored UI app, created new netstandard class library with new namespaceOO-1301 Changed Process to IntrPtr type as parameter for GetMainModuleFileName --- Dyqui.ConsoleDemo/Dyqui.ConsoleDemo.csproj | 16 ++ Dyqui.ConsoleDemo/Program.cs | 85 +++++++++ Dyquo.Charts3d/Dyquo.Charts3d.csproj | 10 +- Dyquo.Charts3d/packages.config | 4 +- Dyquo.Optimization.UI/App.config | 14 +- .../Dyquo.Optimization.UI.csproj | 62 +++++- Dyquo.Optimization.UI/MainWindow.xaml | 14 +- Dyquo.Optimization.UI/MainWindow.xaml.cs | 119 ++++++------ Dyquo.Optimization.UI/ParticlesViewModel.cs | 4 +- Dyquo.Optimization.UI/packages.config | 15 +- Dyquo.PSO/Class1.cs | 8 + Dyquo.PSO/Dyquo.PSO.csproj | 8 + Dyquo.PSO/Extensions.cs | 32 ++++ Dyquo.PSO/Particle.cs | 28 +++ Dyquo.PSO/Result.cs | 15 ++ Dyquo.PSO/Solver.cs | 180 ++++++++++++++++++ Dyquo.PSO/SolverData.cs | 23 +++ Dyquo.PSO/SolverOptions.cs | 28 +++ ParticleSwarmOptimization.sln | 25 ++- 19 files changed, 601 insertions(+), 89 deletions(-) create mode 100644 Dyqui.ConsoleDemo/Dyqui.ConsoleDemo.csproj create mode 100644 Dyqui.ConsoleDemo/Program.cs create mode 100644 Dyquo.PSO/Class1.cs create mode 100644 Dyquo.PSO/Dyquo.PSO.csproj create mode 100644 Dyquo.PSO/Extensions.cs create mode 100644 Dyquo.PSO/Particle.cs create mode 100644 Dyquo.PSO/Result.cs create mode 100644 Dyquo.PSO/Solver.cs create mode 100644 Dyquo.PSO/SolverData.cs create mode 100644 Dyquo.PSO/SolverOptions.cs diff --git a/Dyqui.ConsoleDemo/Dyqui.ConsoleDemo.csproj b/Dyqui.ConsoleDemo/Dyqui.ConsoleDemo.csproj new file mode 100644 index 0000000..a3d0ab9 --- /dev/null +++ b/Dyqui.ConsoleDemo/Dyqui.ConsoleDemo.csproj @@ -0,0 +1,16 @@ + + + + Exe + netcoreapp2.1 + + + + + + + + + + + diff --git a/Dyqui.ConsoleDemo/Program.cs b/Dyqui.ConsoleDemo/Program.cs new file mode 100644 index 0000000..3b5ea81 --- /dev/null +++ b/Dyqui.ConsoleDemo/Program.cs @@ -0,0 +1,85 @@ + +namespace Dyqui.ConsoleDemo +{ + using System; + using System.Linq; + using System.Reactive.Linq; + + using Dyqui.PSO; + + class Program + { + static void Main(string[] args) + { + RunSolver(); + Console.ReadLine(); + } + + private static async void RunSolver() + { + var solver = new Solver(ErrorFunction, GetPsoSolverOptions()); + var data = solver.Initialize(); + + GetParticleUpdates(solver) + .Subscribe(particles => + { + var result = particles.Where(p => p.Error != 0).Select(p => (xy: p.BestPosition, score: 1 / p.Error)).ToArray(); + var x = result.WeightedAverage(a => a.xy[0], a => a.score); + var y = result.WeightedAverage(a => a.xy[1], a => a.score); + Console.WriteLine($"{x},{y}"); + }); + + _ = await solver.SolveAsync(data); + } + + + static IObservable GetParticleUpdates(Solver solver) + { + return Observable.FromEvent( + onNextHandler => (s, d) => onNextHandler(d), + d => solver.AfterEpoch += d, + d => solver.AfterEpoch -= d) + .Select(d =>d.Particles); + + + } + + + static double ErrorFunction(double[] pos) + { + double target = -0.42888194; + //double target = -100000; // To minimize without specific target + + double f = Function2d(pos); + + // Quadratic error + return (f - target) * (f - target); + } + + static double Function2d(double x, double y) + { + return x * Math.Exp(-((x * x) + (y * y))); + } + + static double Function2d(double[] pos) + { + var x = pos[0]; + var y = pos[1]; + return Function2d(x, y); + } + + private static SolverOptions GetPsoSolverOptions() => new SolverOptions + { + NumDimensions = 2, + NumParticles = 50, + MaxEpochs = 500, + MinimumX = -10.0, + MaximumX = 10.0, + AcceptanceError = 0.00000000, + InertiaWeight = 0.729, + C1CognitiveWeight = 1.5, + C2SocialWeight = 1.5, + ParticleResetProbability = 0.001, + }; + } +} diff --git a/Dyquo.Charts3d/Dyquo.Charts3d.csproj b/Dyquo.Charts3d/Dyquo.Charts3d.csproj index 8730059..34be207 100644 --- a/Dyquo.Charts3d/Dyquo.Charts3d.csproj +++ b/Dyquo.Charts3d/Dyquo.Charts3d.csproj @@ -32,13 +32,11 @@ 4 - - False - ..\..\helix-toolkit\Source\HelixToolkit.Wpf\bin\Debug\HelixToolkit.dll + + ..\packages\HelixToolkit.2.10.0\lib\netstandard1.1\HelixToolkit.dll - - False - ..\..\helix-toolkit\Source\HelixToolkit.Wpf\bin\Debug\HelixToolkit.Wpf.dll + + ..\packages\HelixToolkit.Wpf.2.10.0\lib\net45\HelixToolkit.Wpf.dll diff --git a/Dyquo.Charts3d/packages.config b/Dyquo.Charts3d/packages.config index b21aaca..d0d4f05 100644 --- a/Dyquo.Charts3d/packages.config +++ b/Dyquo.Charts3d/packages.config @@ -1,5 +1,5 @@  - + + \ No newline at end of file diff --git a/Dyquo.Optimization.UI/App.config b/Dyquo.Optimization.UI/App.config index 00bfd11..f1f670c 100644 --- a/Dyquo.Optimization.UI/App.config +++ b/Dyquo.Optimization.UI/App.config @@ -1,6 +1,18 @@ - + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dyquo.Optimization.UI/Dyquo.Optimization.UI.csproj b/Dyquo.Optimization.UI/Dyquo.Optimization.UI.csproj index f35b750..173ec12 100644 --- a/Dyquo.Optimization.UI/Dyquo.Optimization.UI.csproj +++ b/Dyquo.Optimization.UI/Dyquo.Optimization.UI.csproj @@ -14,6 +14,8 @@ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 true + + AnyCPU @@ -35,17 +37,24 @@ 4 - - ..\packages\Eto.Forms.2.2.0\lib\net45\Eto.dll - True + + ..\packages\Eto.Forms.2.4.1\lib\netstandard1.0\Eto.dll ..\packages\Eto.OxyPlot.Wpf.1.2.0-beta\lib\net45\Eto.OxyPlot.Wpf.dll True - - ..\packages\Eto.Platform.Wpf.2.2.0\lib\net45\Eto.Wpf.dll - True + + ..\packages\Eto.Platform.Wpf.2.4.1\lib\net45\Eto.Wpf.dll + + + ..\packages\HelixToolkit.2.10.0\lib\netstandard1.1\HelixToolkit.dll + + + ..\packages\HelixToolkit.Wpf.2.10.0\lib\net45\HelixToolkit.Wpf.dll + + + ..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.3\lib\net45\Microsoft.Xaml.Behaviors.dll ..\packages\OxyPlot.Core.1.0.0\lib\net45\OxyPlot.dll @@ -55,8 +64,36 @@ ..\packages\OxyPlot.Wpf.1.0.0\lib\net45\OxyPlot.Wpf.dll True + + ..\packages\ReactiveProperty.6.1.4\lib\net461\ReactiveProperty.dll + + + ..\packages\ReactiveProperty.6.1.4\lib\net461\ReactiveProperty.NET46.dll + + + ..\packages\System.ComponentModel.Annotations.4.6.0\lib\net461\System.ComponentModel.Annotations.dll + + + + ..\packages\System.Reactive.4.2.0\lib\net46\System.Reactive.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + + ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + + + @@ -122,12 +159,19 @@ {BBF1973F-289C-418B-B5E1-2251F77A4BB1} Dyquo.Charts3d - - {01632468-842a-42eb-8cdb-31cc24e50e44} - Dyquo.Optimization.Swarm + + {1d7aa1ac-b358-4906-a36f-9007831cb7c8} + Dyquo.PSO + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + +