Update app.py
Browse files
app.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
import gradio as gr
|
2 |
import numpy as np
|
3 |
import logging
|
4 |
-
import requests
|
5 |
from tqdm import tqdm
|
6 |
|
7 |
class SwarmAgent:
|
@@ -12,11 +11,11 @@ class SwarmAgent:
|
|
12 |
self.v = np.zeros_like(position)
|
13 |
|
14 |
class SwarmNeuralNetwork:
|
15 |
-
def __init__(self, num_agents, param_shape, target_response,
|
16 |
self.param_shape = param_shape
|
17 |
self.agents = [SwarmAgent(self.random_position(), self.random_velocity()) for _ in range(num_agents)]
|
18 |
self.target_response = target_response
|
19 |
-
self.
|
20 |
self.current_epoch = 0
|
21 |
self.noise_schedule = np.linspace(0.1, 0.002, 1000) # Noise schedule
|
22 |
|
@@ -26,15 +25,10 @@ class SwarmNeuralNetwork:
|
|
26 |
def random_velocity(self):
|
27 |
return np.random.randn(*self.param_shape) * 0.01
|
28 |
|
29 |
-
def
|
30 |
-
#
|
31 |
-
|
32 |
-
|
33 |
-
response = requests.get(self.api_endpoint)
|
34 |
-
response_value = len(response.text) # Example: use length of response text as a metric
|
35 |
-
except Exception as e:
|
36 |
-
response_value = 0 # Fallback if API call fails
|
37 |
-
return response_value
|
38 |
|
39 |
def update_agents(self, timestep):
|
40 |
noise_level = self.noise_schedule[min(timestep, len(self.noise_schedule) - 1)]
|
@@ -59,7 +53,7 @@ class SwarmNeuralNetwork:
|
|
59 |
self.update_agents(epoch)
|
60 |
|
61 |
# Evaluate performance
|
62 |
-
responses = [self.
|
63 |
mse = np.mean((np.array(responses) - self.target_response)**2)
|
64 |
logging.info(f"Epoch {epoch}, MSE: {mse}")
|
65 |
|
@@ -86,20 +80,24 @@ class SwarmNeuralNetwork:
|
|
86 |
for step in tqdm(range(num_steps), desc="Generating Parameters"):
|
87 |
self.update_agents(num_steps - step - 1) # Reverse order
|
88 |
|
89 |
-
best_agent = min(self.agents, key=lambda agent: np.mean((self.
|
90 |
return best_agent.position
|
91 |
|
|
|
|
|
|
|
|
|
92 |
# Gradio Interface
|
93 |
-
def train_snn(
|
94 |
param_shape = (10,) # Example parameter shape
|
95 |
-
snn = SwarmNeuralNetwork(num_agents=num_agents, param_shape=param_shape, target_response=target_response,
|
96 |
snn.train(epochs=epochs)
|
97 |
snn.save_model('snn_model.npy')
|
98 |
return snn.generate_new_parameters()
|
99 |
|
100 |
-
def generate_new_parameters(
|
101 |
param_shape = (10,) # Example parameter shape
|
102 |
-
snn = SwarmNeuralNetwork(num_agents=2000, param_shape=param_shape, target_response=None,
|
103 |
snn.load_model('snn_model.npy')
|
104 |
new_params = snn.generate_new_parameters()
|
105 |
return new_params
|
@@ -107,14 +105,13 @@ def generate_new_parameters(api_endpoint):
|
|
107 |
interface = gr.Interface(
|
108 |
fn=train_snn,
|
109 |
inputs=[
|
110 |
-
gr.Textbox(label="API Endpoint", value="https://meowfacts.herokuapp.com/"),
|
111 |
gr.Number(label="Target Response"),
|
112 |
gr.Slider(minimum=500, maximum=3000, value=2000, label="Number of Agents"),
|
113 |
gr.Slider(minimum=10, maximum=200, value=100, label="Number of Epochs")
|
114 |
],
|
115 |
outputs=gr.Textbox(label="Generated Parameters"),
|
116 |
-
title="Swarm Neural Network
|
117 |
-
description="Set the
|
118 |
)
|
119 |
|
120 |
interface.launch()
|
|
|
1 |
import gradio as gr
|
2 |
import numpy as np
|
3 |
import logging
|
|
|
4 |
from tqdm import tqdm
|
5 |
|
6 |
class SwarmAgent:
|
|
|
11 |
self.v = np.zeros_like(position)
|
12 |
|
13 |
class SwarmNeuralNetwork:
|
14 |
+
def __init__(self, num_agents, param_shape, target_response, optimization_function):
|
15 |
self.param_shape = param_shape
|
16 |
self.agents = [SwarmAgent(self.random_position(), self.random_velocity()) for _ in range(num_agents)]
|
17 |
self.target_response = target_response
|
18 |
+
self.optimization_function = optimization_function
|
19 |
self.current_epoch = 0
|
20 |
self.noise_schedule = np.linspace(0.1, 0.002, 1000) # Noise schedule
|
21 |
|
|
|
25 |
def random_velocity(self):
|
26 |
return np.random.randn(*self.param_shape) * 0.01
|
27 |
|
28 |
+
def evaluate_function(self, params):
|
29 |
+
# Evaluate the optimization function
|
30 |
+
response = self.optimization_function(params)
|
31 |
+
return response
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
def update_agents(self, timestep):
|
34 |
noise_level = self.noise_schedule[min(timestep, len(self.noise_schedule) - 1)]
|
|
|
53 |
self.update_agents(epoch)
|
54 |
|
55 |
# Evaluate performance
|
56 |
+
responses = [self.evaluate_function(agent.position) for agent in self.agents]
|
57 |
mse = np.mean((np.array(responses) - self.target_response)**2)
|
58 |
logging.info(f"Epoch {epoch}, MSE: {mse}")
|
59 |
|
|
|
80 |
for step in tqdm(range(num_steps), desc="Generating Parameters"):
|
81 |
self.update_agents(num_steps - step - 1) # Reverse order
|
82 |
|
83 |
+
best_agent = min(self.agents, key=lambda agent: np.mean((self.evaluate_function(agent.position) - self.target_response)**2))
|
84 |
return best_agent.position
|
85 |
|
86 |
+
# Optimization function
|
87 |
+
def optimization_function(params):
|
88 |
+
return np.sum((params - 3)**2) # Example: simple quadratic function
|
89 |
+
|
90 |
# Gradio Interface
|
91 |
+
def train_snn(target_response, num_agents, epochs):
|
92 |
param_shape = (10,) # Example parameter shape
|
93 |
+
snn = SwarmNeuralNetwork(num_agents=num_agents, param_shape=param_shape, target_response=target_response, optimization_function=optimization_function)
|
94 |
snn.train(epochs=epochs)
|
95 |
snn.save_model('snn_model.npy')
|
96 |
return snn.generate_new_parameters()
|
97 |
|
98 |
+
def generate_new_parameters():
|
99 |
param_shape = (10,) # Example parameter shape
|
100 |
+
snn = SwarmNeuralNetwork(num_agents=2000, param_shape=param_shape, target_response=None, optimization_function=optimization_function)
|
101 |
snn.load_model('snn_model.npy')
|
102 |
new_params = snn.generate_new_parameters()
|
103 |
return new_params
|
|
|
105 |
interface = gr.Interface(
|
106 |
fn=train_snn,
|
107 |
inputs=[
|
|
|
108 |
gr.Number(label="Target Response"),
|
109 |
gr.Slider(minimum=500, maximum=3000, value=2000, label="Number of Agents"),
|
110 |
gr.Slider(minimum=10, maximum=200, value=100, label="Number of Epochs")
|
111 |
],
|
112 |
outputs=gr.Textbox(label="Generated Parameters"),
|
113 |
+
title="Swarm Neural Network Function Optimization",
|
114 |
+
description="Set the target response, number of agents, and epochs to train the Swarm Neural Network to generate optimized function parameters."
|
115 |
)
|
116 |
|
117 |
interface.launch()
|