|
XxneedhelpxX |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 28.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.12.2021, 14:10
Titel: Optimale Stationierung
|
|
|
|
|
Hallo,
ich muss für meine Projektarbeit die optimale Stationierung von Rettungshubschraubern rausfinden. Die Aufgabe soll ich mit Hilfe des k-means Algorithmus lösen.
Es stehen 3 Hubschrauber zur verfügung und es gibt 109 Skigebiete.
Die Frage ist, wo diese Hubschrauber stationiert werden sollen.
Die Standorte der Skigebiete sind in x und y Koordinaten angegeben und die Unfallhäufigkeit der Skigebiete ist als Zahl angegeben
Es gibt mehrere Lösungsansätze, jedoch soll ich die gewichtete Mittelbildung als Lösungsansatz verwirklichen.
Diese Aufgabe soll mit Hilfe des k-means Algorithmus gelöst werden. Der Pseudocode ist wie folgt:
1. Anzahl der gewünschten Cluster wählen (hier K-Rettungshubschrauber)
2. K zufällige Skigebiete als mögliche Rettungshubschrauberstandorte auswählen
3. Distanz aller Skigebiete zu den gewählten Hubschrauberstandorten berechnen
4. Skigebiete werden dem Hubschrauberstandort mit dem geringsten Abstand zugewiesen
5. Den gewichteten Mittelwert (auch Schwerpunktgenannt) jedes Clusters bestimmen.
6. Als neue Clusterpunkte beziehungsweise Hubschrauberstandorte wählt man die Skigebiete, mit dem geringsten Abstand zu den einzelnen Schwerpunkten
7. Wenn sich die Cluster unterscheiden, wiederhole (3)-(6). Wenn sich seit dem letzten Durchlaufnichts verändert hat, breche ab.
8. ENDE
Ich würde mich sehr über eine Hilfe bei dem k-means Algorithmus freuen, die Lösung wäre natürlich optimal, es reicht aber auch nur eine Idee oder eine Veranschaulichung, wie der Algorithmus aussehen muss.
Natürlich muss der Algorithmus in Matlab funltionieren.
Ich bedanke mich jetzt schonmal
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.12.2021, 16:34
Titel:
|
|
Hallo,
was hast du denn versucht?
kmeans
ist ja in MATLAB schon implementiert. Es kann natürlich sein, dass du das zur Übung selbst implementieren sollst. Dann bringt es aber wenig, wenn man dir die Lösung hinschreibt. Ebenso gut kannst du die Toolbox-Funktion oder File Exchange-Einträge ansehen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
XxneedhelpxX |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 28.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.01.2022, 13:50
Titel:
|
|
|
|
|
Ich habe jetzt mal diesen Code für den kmeans Algorithmus erstellt. Würde mich freuen wenn es Verbesserungsvorschläge oder so gibt:)
Für A wird eine Matrix verwendet, die die gewünschten Koordinaten besitzt.
Dort wo die Smileys sind sind bei meinem Code das doppelpunlt zeichen ":"
Keine Ahnung warum das so ist
function X = kmeans(A,S,M)
%Input : −Datenpunkte als Zeilen in Matrix A ,
% − Clusterpunkte als Zeilen in Matrix S ,
% − Anzahl der Durchlaeufe M des Algorithmus
%Output : Matrix X, in der jeder Datenpunk t durch den
% naechst gelegenen Cluster punkt ersetzt wurde
N=size(A,1); %Def. Anzahl der Datenpunkte
X=zeros(size(A)); %Def. Outputmatrix
for m=1:M % Durchlaufschleife des Algorithmus
K=size(S,1); %Def. Anzahl Clusterpunkte
D=zeros(N,K); %Def. einer "Distanzmatrix"
L=zeros(N,1); %Def. eines "Labelvektors"
Z=zeros(N,1); %Def. eines Hilfsvektors
% Clustering
for i=1:N % Bestimme naechstgelegenen
% Clusterpunkt zum i−ten Datenpunkt
for k=1:K % Bestimme Distanz vom i−ten Datenpunkt
% zum k−ten Clusterpunkt
D(i,k)=norm(A(i, - S(k,);
end
[Z(i), L(i)] =min(D(i,); %Setze L(i) als den Index des
% Abstands−minimierenden Clusterpunkts
end
% Berechnung der neuen Clusterpunkte
S=zeros(size(S)); % Loesche alte Clusterpunkte
n=zeros(K,1); % Def. "Zaehlvektor"
for i=1:N % Summiere alle Datenpunkte mit gleichem Label
l=L(i); % Def. Label des i−ten Datenpunktes
S(l,=S(l,+A(i,;
n(l)=n(l)+1; % Erhoehe Zaehler zum l−ten Label
end
for k=1:K % Teile die Summen durch die Anzahl der Summanden
S(k,=1/n(k)*S(k,;
end
end
for i=1:N % Def. i−te Zeile der Outputmatrix durch den zum
% i−ten Datenpunkt naechst liegenden Clusterpunkt
l=L(i);
X(i,=S(l,;
end
end
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.01.2022, 14:12
Titel:
|
|
Hallo,
Zitat: |
Dort wo die Smileys sind sind bei meinem Code das doppelpunlt zeichen ":"
Keine Ahnung warum das so ist |
Du kannst die Code-Umgebung verwenden und/oder die Smilies deaktivieren.
Spricht etwas gegen die Verwendung der fertigen kmeans-Funktion (die du momentan mit deiner Funktion überlagerst)? Du könntest die Ergebnisse deiner Funktion mit denen von der Standardfunktion vergleichen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
XxneedhelpxX |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 28.12.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.01.2022, 14:45
Titel:
|
|
Wenn ich versuche die kmeans Funktion von Matlab aufzurufen, steht dort dass die Funktion nicht gefunden wurde
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.01.2022, 15:03
Titel:
|
|
Hallo,
hast du denn die Statistics and Machine Learning Toolbox?
Ansonsten bieten sich wie gesagt Implementierungen auf File Exchange an.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|