From da8922e484a3680375bab6474ab57cebadc1e32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Gr=C3=BCndinger?= Date: Sat, 27 Jul 2024 21:39:36 +0200 Subject: [PATCH] Refactor code: Improve file handling and variable initialization --- Code/ai.fll | 39 +++++++++++++++++++++++++++++++++++++++ Code/compiler_gui.py | 6 +++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Code/ai.fll b/Code/ai.fll index e69de29..ef6362d 100644 --- a/Code/ai.fll +++ b/Code/ai.fll @@ -0,0 +1,39 @@ +# Bsp: Datensatz (Bitte bearbeiten für die von Ihnen gemessene Werte) +# Für die kalibrierung bitte einfach die eingebaute Funktion calibrate aus und lassen sie sich das Ergebnis ausgeben. +# Die Reifennutzung verändert sich für jeden Run um -0.05 +# Der Batterieladestand muss jedesmal gesondert abgelesen werden +# Wenn sie diese Schritte einhalten kann die KI / das KNN richtig funktionieren +data = [ + {'Kalibrierung': 1.0, 'Batterieladestand': 100, 'Reifennutzung': 1.0, 'Multiplikation': 1.00}, + {'Kalibrierung': 1.0, 'Batterieladestand': 90, 'Reifennutzung': 0.9, 'Multiplikation': 1.10}, + {'Kalibrierung': 1.0, 'Batterieladestand': 80, 'Reifennutzung': 0.8, 'Multiplikation': 1.25}, + {'Kalibrierung': 0.9, 'Batterieladestand': 100, 'Reifennutzung': 1.0, 'Multiplikation': 1.10}, + {'Kalibrierung': 1.1, 'Batterieladestand': 100, 'Reifennutzung': 1.0, 'Multiplikation': 0.95} +] + +def euclidean_distance(point1, point2): + distance = 0.0 + for key in point1: + if key != 'Multiplikation': + distance += (point1[key] - point2[key]) ** 2 + return math.sqrt(distance) + +def knn_predict(data, new_data_point, k=3): + # Berechne die Distanz zwischen dem neuen Punkt und allen anderen Punkten + distances = [] + for item in data: + dist = euclidean_distance(new_data_point, item) + distances.append((dist, item['Multiplikation'])) + + distances.sort(key=lambda x: x[0]) + neighbors = distances[:k] + + total_distance = sum(neighbor[1] for neighbor in neighbors) + predicted_distance = total_distance / k + + return predicted_distance + +# Beispielhafte Vorhersage +new_data_point = {'Kalibrierung': 0.84, 'Batterieladestand': 85, 'Reifennutzung': 0.95} +predicted_distance = knn_predict(data, new_data_point, k=3) +print(f'Vorhergesagte Multiplikation: {predicted_distance}') diff --git a/Code/compiler_gui.py b/Code/compiler_gui.py index a6a2a9e..ee74b9e 100644 --- a/Code/compiler_gui.py +++ b/Code/compiler_gui.py @@ -81,7 +81,7 @@ def write_function(function,file,value=False): sleep_out = f"\ntime.sleep({str(value)})" f.write(sleep_out) case "init": - init_out = f"\nimport force_sensor, distance_sensor, motor, motor_pair\nfrom hub import port\nimport time\nfrom app import linegraph as ln\nimport runloop\nfrom math import *\nimport random\n" + init_out = f"\nimport force_sensor, distance_sensor, motor, motor_pair\nfrom hub import port\nimport time\nfrom app import linegraph as ln\nimport runloop\nfrom math import *\nimport random\nimport math\n" f.write(init_out) case "ai.chose": ai_chose_out = f"ai_chose = '{str(value)}'\n" @@ -285,8 +285,8 @@ def compile_llsp3(file, directory, project_name): for filename in filenames: file_path = os.path.join(foldername, filename) arcname = os.path.relpath(file_path, directory) - zip_ref.write(file_path, arcname) - + zip_ref.write(file_path, arcname) + if os.path.exists(llsp3_file_path): os.remove(manifest_path) os.remove(icon_svg_path)