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}.
+
+
+