# Heuristik (x/y Achse - Verfahren)



## maekkesmaex (20. Dez 2012)

Hallo zusammen,
ich stehe gerade voll auf dem Schlauch und komme nicht weiter. :noe:

Ich habe die Aufgabe mit Hilfe eines Stanz-Tools die Stanzabfolge zu bestimmen.
Das heißt gewünscht ist "geschlängelt" die Punkte abzufahren.
(Zuerst ist x-Richtung und dann eins nach oben bzw. unten in y-Richtung; das gilt jeweils für die "Punktgruppen")

Momentan bin ich noch am Anfang und ermittle vom Ursprung aus den Punkt der am kürzesten davon entfernt ist.







Mein Startpunkte wäre somit links oben, wie im Bild zu sehen ist.
Derzeit ist auch die Reihenfolge anders, das Ziel ist es wie gesagt geschlängelt das Ganze abzufahren.


```
public void pivotHeuristic() 
		{			
			double[] distances = new double[order.length];
			float shortest = Float.MAX_VALUE;
			
			int min_x = vias[0][0];
			int min_y = vias[0][1];
			int start = 0;

			for(int i=0; i<order.length; i++)
			{
				float dx = vias[order[i]][0];
				float dy = vias[order[i]][1];

				distances[i] = Math.sqrt(dx*dx + dy*dy);
				if(distances[i] < shortest)
				{
					shortest = (float) distances[i];
					min_x = vias[order[i]][0];
					min_y = vias[order[i]][1];
					start = i;
				}
			}
			
			for(int i=0; i<order.length; i++)
			{
				
			}
			
			System.out.println("Vektorlänge: " + shortest);
			System.out.println("x-Wert: " + min_x + ", " + "y-Wert: " + min_y);
			
			int[] newSolution = new int[order.length];
			newSolution[0] = start;			
			
		}
```

Ich glaube auch, dass das ganze nicht so schwer ist. Jedoch fehlt mir die zündende Idee. :idea:
Wäre nett, wenn jmd. in irgendeiner Weise helfen kann.
Vielen Dank im Voraus.

Lg maekkesmaex


----------



## Marco13 (20. Dez 2012)

Bilden die immer so ein gleichförmiges Raster? Liegen die schon in einer bestimmten Reihenfolge in diesem vias-Array?


----------



## Landei (20. Dez 2012)

Das ist so ähnlich wie das Rundreise-Problem (TSP - Travelling Salesman Problem),  nur dass du am Ende nicht wieder zum Anfangspunkt musst. Dafür gibt es schon gute Heuristiken, google mal. Der Vorteil zu einer eigenen Heuristik ist, dass es auch mit anderen Mustern gut zurechtkommt, d.h. null Änderungsaufwand bei Produktionsumstellung.


----------



## Marco13 (20. Dez 2012)

Ja, eine dieser Heuristiken ist eben "gehe immer zum nächsgelegenen, unbesuchten Punkt". Aber wenn Das Muster eben z.B.

```
X      X      X      X

   X       X      X      X
```
ist, und man dann ganz gezielt NICHT zum nächstgelegenen will, sondern erstmal Horizontal (oder allgemeiner: Wenn es gar nicht um ein TSP geht, sondern nur um das Umsetzen einer vorgegebenen Regel) muss man sich was überlegen...


----------



## maekkesmaex (20. Dez 2012)

Also leider ist das nicht immer der Fall, ingesamt sind es um die 2000 Punkte.

X.22=5.881  Y.22=-48.470
X.23=6.107  Y.23=-48.079
X.24=6.333  Y.24=-48.470
X.25=6.558  Y.25=-48.079
X.26=6.784  Y.26=-48.470
X.27=7.010  Y.27=-48.079
X.28=7.235  Y.28=-48.470
X.29=7.461  Y.29=-48.079
X.30=7.686  Y.30=-48.470
X.31=7.912  Y.31=-48.079
X.32=8.138  Y.32=-48.470

Hier mal ein paar Beispiel-Punkte aus dem Array.
(Wobei das aber jetzt noch der Zick-Zack-Weg ist.)

In der Regel sind sie aber schon "fast" rasterförmig angeordnet.


----------



## Landei (20. Dez 2012)

Marco13 hat gesagt.:


> Ja, eine dieser Heuristiken ist eben "gehe immer zum nächsgelegenen, unbesuchten Punkt". Aber wenn Das Muster eben z.B.
> 
> ```
> X      X      X      X
> ...



Aber TSP würde hier eine gute Lösung liefern:

```
X------X------X------X
  \                   \
   X------X------X-----X
```


----------



## maekkesmaex (25. Jan 2013)

Ich hab es jetzt hinbekommen das linke obere Punkte-Viereck erfolgreich auszulesen. (siehe Screenshot, ganz oben)
Jetzt hab ich eine Frage, ob ich die Punkte so anhand ihrer Koordinaten anordnen kann, dass Sie so angeordnet werden: 

   X ->  X ->  X ->  X
     X  <- X  <- X  <- X
   X ->  X ->  X ->  X 
     X <-  X  <- X  <- X

Gibt es da schon vorhandene Methoden oder muss man sich das wieder über for-schleifen zusammenwurschteln?

Vielen Dank für Hilfe im Voraus!


----------

