apso
compile_flags.txt
+*.gnu
-all: compile_flags executable
+build: compile_flags executable
-compile_flags:
+compile_flags_gtk:
echo "-Iinclude `pkg-config --cflags gtk4` -lm -fopenmp `pkg-config --libs gtk4`" | perl -pe 's|(-.*?)\s|\1\n|g' > compile_flags.txt
echo "-o apso" >> compile_flags.txt
+compile_flags:
+ echo "-Iinclude -lm -fopenmp" | perl -pe 's|(-.*?)\s|\1\n|g' > compile_flags.txt
+ echo "-o apso" >> compile_flags.txt
+
executable: $(wildcard src/*.c)
gcc $(shell cat compile_flags.txt) $(shell ls src/*.c)
+
+clear:
+ rm apso
+ rm compile_flags.txt
+++ /dev/null
-#include <gtk/gtk.h>
-
-GtkApplication *gui_init();
double *velocity;
};
-void pick(const int dim, const range *vrange, double *v);
+void pick(const int dim, const range *rrange, double *v);
void swarm_populate(swarm *sw, const range *rrange);
void swarm_velocity_update(swarm *sw);
void swarm_optimize(swarm *sw);
+++ /dev/null
-#include "gui.h"
-
-static void on_activate(GtkApplication *app) {
- GtkWidget *window = gtk_application_window_new(app);
- GtkWidget *button = gtk_button_new_with_label("Hello, World!");
- g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_window_close), window);
- gtk_window_set_child(GTK_WINDOW(window), button);
- gtk_window_present(GTK_WINDOW(window));
-}
-
-GtkApplication *gui_init() {
- GtkApplication *app = gtk_application_new("org.wafflesoft.NCPSO", G_APPLICATION_DEFAULT_FLAGS);
- g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
- return app;
-}
+#include <math.h>
+#include <stdio.h>
#include "vector.h"
#include "swarm.h"
-#include "gui.h"
double b0(double *x) {
return -x[0];
};
swarm_populate(&sw, rrange);
swarm_optimize(&sw);
- printf("APSO: converged in x=");
+ printf("apso: converged in x=");
vec_print(sw.params.dim, sw.global_best->current.x);
printf(" with fitness f(x)=%f\n", sw.global_best->current.fitness);
// GtkApplication *app = gui_init();
return rands() * (max - min) + min;
}
-void pick(const int dim, const range *vrange, double *v) {
- for (int d = 0; d < dim; d++) v[d] = randrange(vrange[d].min, vrange[d].max);
+void pick(const int dim, const range *rrange, double *v) {
+ for (int d = 0; d < dim; d++) v[d] = randrange(rrange[d].min, rrange[d].max);
}
void swarm_populate(swarm *sw, const range *rrange) {
void swarm_optimize(swarm *sw) {
int conv = 0;
double best = INFINITY;
- while (conv < 10000) {
+ while (conv < 1000) {
swarm_velocity_update(sw);
if (fabs(sw->global_best->current.fitness - best) < sw->params.eps)
conv++;