PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche einen Lösungsansatz


atmosfear
08.08.2005, 11:17
Hallo und schönen Vormittag zusammen!

Ich suche eine Möglichkeit die benötigte Anzahl von Stehern in einem Raum zu ermitteln. Hier die Spezifikation:

L = Gesamtlänge des Raumes
B = Breite der einzelnen Steher
S = Spaltabstand zwischen den Stehern
AL = Abstand vom linken Rand des mittleren Stehers zum linken Rand des abschließenden Stehers
AR = Abstand vom rechten Rand des mittleren Stehers zum rechten Rand des abschließenden Stehers
L = Randabstand zum linken Steher
R = Randabstand zum rechten Steher

N = Anzahl der Steher gesamt
NL = Anzahl der Steher auf der linken Seite
NR = Anzahl der Steher auf der rechten Seite

Ich habe Folgendes zusammengefasst:

L = L + AL + B + AR + R

AL = NL * (B + S)
AR = NR * (B + S)

N = NL + NR + 1 (da der in der Mitte stehende Pfeiler ausgelassen wird)

Dieses Ergebnis sollte natürlich ganzzahlig sein, denn wenn nicht muss die Spaltbreite so angepasst werden, dass ein ganzzahliges Ergebnis herauskommt!

Sollte auf beiden Seiten keine Spaltbreite gefunden werden, die ein ganzzahliges Ergebnis liefert, so muss gegebenenfalls die Steherbreite angepasst werden...

Nur wie lässt sich das alles am besten in eine Schleife packen!?
Ich habe gehört, dass sich Dieses mit dem sogenannten "Brute-Force" Algorithmus lösen lässt!?

DANKE
atmosfear


DarkTom
09.08.2005, 14:39
Momentan sehe ich keinen Bedarf für Brute-Force. Aber vielleicht verkenne ich auch das Problem. Soll S ganzzahlig sein? Ansonsten existiert immer eine Lösung, ohne dass man B verändern muss. Dürfen wir S auch verkleinern oder nur vergrössern? Ich gehe mal von letzterem aus.

Ist übrigens nicht gerade günstig, dass du die Bezeichnung L doppelt belegst.


Das sollte reichen:
N = 1 + floor[(L - L - R - B) / (B + S)]
Sneu = ((L - L - R) - (N * B)) / (N - 1)

Mit floor bezeichne ich hier das abrunden.

atmosfear
10.08.2005, 08:06
Hallo!

Soll S ganzzahlig sein? Ansonsten existiert immer eine Lösung, ohne dass man B verändern muss. Dürfen wir S auch verkleinern oder nur vergrössern? Ich gehe mal von letzterem aus.

Ist übrigens nicht gerade günstig, dass du die Bezeichnung L doppelt belegst.
Ja, S soll bzw. muss IMMER ganzzahlig sein! Da existiert dann definitiv nicht immer eine Lösung, ohne dass B ebenfalls angeglichen werden muss.

S sollte sich in einem vorher definierten Toleranzbereich bewegen, z.B.: sollte sich der Spaltabstand zwischen 100 und 200 Millimeter bewegen, wobei 150 mm der am Anfang gegebene Sollabstand ist.

Sorry, das mit L war mein Fehler, ich meinte natürlich G für die Gesamtlänge!!

Ich versuche nun deine Formel entsprechend anzupassen...
Das sollte reichen:
N = 1 + floor[(G - L - R - B) / (B + S)]
Sneu = ((G - L - R) - (N * B)) / (N - 1)
Okay aber wie kann ich das nun in eine Funktion packen, die mir alle Möglichkeiten durchspielt???

DANKE
atmosfear

DarkTom
10.08.2005, 22:55
Das war nicht für "alle durchprobieren" gedacht, sondern als fertige Lösung. Aber war ich auch nicht von der Eischränkung auf ganzzahlige Werte ausgegangen.

Mal nachdenken...

Wenn S und B schon ganzzahlig sein müssen, dann muss sicher auch die Lösung "perfekt" sein, es darf kein freier Raum übrigbleiben, d.h. L und R sind fest.

Es kann da natürlich gut sein, dass die Lösung weit von den ursprünglichen Vorstellungen entfernt ist.


*denk*


Ich führe mal X = G - L - R als effektive Länge ein.

Wir suchen N, B, und S so dass, X = N*B + (N-1)*S
Und S, B möglichst nahe an den Vorgaben. Um zu unterscheiden, benenne ich die gegebenen Werte mal mit kleinen Buchstaben: b, s.


BruteForce (weil du drauf bestehst:)) sähe z.B. so aus:
optN = 1
optB = X
optS = 0
optCost = cost(optN, optB, optS);

für N = 2 bis X
für B = 1 bis X/N
S = (X - N*B) / (N - 1)
if (S ist ganzzahlig UND cost(N, B, S) < optCost)
optN = N
optB = B
optS = S
optCost = cost(N, B, S)
Mit einer geeigneten Kostenfunktion, etwacost(N, B, S) = 2*|B-b| + |S-s|Statt der 2 mag etwas anderes passender sein, lass dir mal alle ganzzahligen Lösungen ausgeben und wähle danach eine passende Konstante.


Kannst du mir bitte noch erklären, warum S ganzahlig sein muss? Wenn der Abstand in deinem Beispiel doch zwischen 100 und 200 mm liegen dürfte, warum dann nicht auch bei z.B. 155,5?

atmosfear
11.08.2005, 09:55
Kannst du mir bitte noch erklären, warum S ganzahlig sein muss? Wenn der Abstand in deinem Beispiel doch zwischen 100 und 200 mm liegen dürfte, warum dann nicht auch bei z.B. 155,5?
Das hat man echt davon wenn man die Antworten nicht ordentlich durchliest :rolleyes:
Ich meinte natürlich, dass N ganzzahlig sein muss und nicht S ich ......
Du hast natürlich vollkommen Recht was das anbelangt!!! TUT MIR LEID!

Was and deiner Vorangehensweise leider fehlt ist die Tatsache, dass auch AL und AR entsprechende berücksichtigt werden muss. Der "mittlere" Steher soll an einer bestimmten Position stehen und diese Gegebenheit fällt bei deiner Rechnung ja wohl durch den Rest, oder irre ich mich da?

Dies ist aber wichtig, da der vorhandene Platz nicht einfach von links oder rechts her gleichmässig aufgeteilt werden darf! Es muss mehr von der Mitte aus nach links und rechts berechnet werden, damit der mittlere Steher auch an seinen gewünschten Platz kommt, denke ich!

Danke für deine Hilfe!
atmosfear

DarkTom
15.08.2005, 13:39
So, ich war ein paar Tage beschäftigt. Aber jetzt habe ich mal wieder etwas Zeit für dich. :)
Das hat man echt davon wenn man die Antworten nicht ordentlich durchliest :rolleyes:
Ich meinte natürlich, dass N ganzzahlig sein muss und nicht S ich ......
Du hast natürlich vollkommen Recht was das anbelangt!!! TUT MIR LEID!
Das ändert das ganze natürlich. Grundsätzlich passt dann der erste Ansatz wieder mehr oder weniger...
Was and deiner Vorangehensweise leider fehlt ist die Tatsache, dass auch AL und AR entsprechende berücksichtigt werden muss. Der "mittlere" Steher soll an einer bestimmten Position stehen und diese Gegebenheit fällt bei deiner Rechnung ja wohl durch den Rest, oder irre ich mich da?Da hast du recht. Das war mir nicht klar gewesen. Wenn die "Mitte" aber fest ist, stellen sich einige Fragen (und diesmal frage ich vorher, bevor ich wieder Lösungen für die falschen Probleme produziere.)

Sollen/müssen die Abstände (also S) im linken und rechten Teil gleich sein?

Muss der feste Platz wirklich die Mitte sein, also sind die Anzahl der Steher links und rechts davon gleich (bzw. max. um einen unterschiedlich, wie in deinem Bild)?

Wie fest ist fest? Falls ich B anpasse, ändert sich ja auch die Breite des festen Stehers.

atmosfear
16.08.2005, 07:43
Sollen/müssen die Abstände (also S) im linken und rechten Teil gleich sein?
Ja, die Abstände links und rechts müssen gleich sein, sonst macht das Ganze ja erst wieder keinen Sinn!


Muss der feste Platz wirklich die Mitte sein, also sind die Anzahl der Steher links und rechts davon gleich (bzw. max. um einen unterschiedlich, wie in deinem Bild)?
Die Anzahl der Steher muss links und rechts NICHT gleich sein, der Steher muss ja nicht immer in der Mitte stehen!
Vielleicht sollten wir das Wort "Mitte" wohl besser mit "an einem fixen/bestimmten Platz" ersetzen, das verwirrt sonst ein bisschen...


Wie fest ist fest? Falls ich B anpasse, ändert sich ja auch die Breite des festen Stehers.
Genau da sehe ich das grösste Problem, da sich der feste Steher in der Breite dann auch mitändert, da hast du Recht!



So, ich hoffe ich habe alle deine Fragen beantworten können :rolleyes:

DANKE :D
atmosfear

DarkTom
16.08.2005, 17:50
Leider hast du die letzte Frage nicht wirklich beantwortet. Naja, ich habe die Lösung jetzt mal allgemeiner formuliert, da hast du in der Hinsicht dann Spielraum. Die Anpassung für B lasse ich auch weg.

Also nur grob:

Berechne N nach Formel in Post #2.
Verringere diese Zahl der Steher bis ein Steher (nahe genug) an der festen Position ist oder der Toleranzbereich für S verlassen wird. Dies ist (falls existent) Lösungsvorschlag 1.
Vergrössere (ausgehend von oben berechnetem N) die Zahl der Steher bis ein Steher (nahe genug) an der festen Position ist oder der Toleranzbereich für S verlassen wird. Dies ist (falls existent) Lösungsvorschlag 2.
Wähle den besseren der beiden Lösungsvorschläge.
Existiert kein Lösungsvorschlag, geht es nicht ohne Anpassung von B...

atmosfear
18.08.2005, 07:49
Hallo Tom!
Tut mir jetzt echt leid, aber irgendwie kann ich dir nicht folgen :confused:

Ich versuche noch einmal alles zusammenzufassen:

1. Berechne N nach Formel in Post #2.
N = 1 + floor[(L - L - R - B) / (B + S)]
Sneu = ((L - L - R) - (N * B)) / (N - 1)
2. Verringere diese Zahl der Steher bis ein Steher (nahe genug) an der festen Position ist oder der Toleranzbereich für S verlassen wird. Dies ist (falls existent) Lösungsvorschlag 1.Wie jetzt, verstehe ich ÜBERHAUPT NICHT!?!?

3. Wähle den besseren der beiden Lösungsvorschläge.Wie soll man solche "Spekulationen" in ein Programm packen!?
Vielleicht stell ich mich da jetzt auch besonders dumm an, aber ich komm nicht dahinter!?

Wie fest ist fest? Falls ich B anpasse, ändert sich ja auch die Breite des festen Stehers.....
Leider hast du die letzte Frage nicht wirklich beantwortet.
Die Breite des festen Stehers is "egal", d.h. ich möchte mich am Anfang nicht auf die Breite eines Stehers festlegen (da es ja passieren kann, dass diese angepasst werden kann). Wichtig ist nur der "Mittelpunkt" des Stehers; der darf nicht angepasst werden.
Beispiel: der Steher sollte genau auf 200 stehen, ob die Breite dann 20 oder 30 ist, ist dann egal, der Mittelpunkt bleibt der gleiche...
Dass sich damit aber auch der "Restwert" für die linke und rechte Seite ändert ist schon richtig!

Danke
atmosfear

DarkTom
29.08.2005, 18:27
Hallo Tom!
Tut mir jetzt echt leid, aber irgendwie kann ich dir nicht folgen :confused:Schade. Hast du überhaupt schon Programmiererfahrung?

2. Wie jetzt, verstehe ich ÜBERHAUPT NICHT!?!?Ich wüsste nicht, wie ich es gross anders formulieren sollte, ohne es direkt zu programmieren (was mir, ehrlich gesagt, momentan zu aufwändig ist).
3. Wie soll man solche "Spekulationen" in ein Programm packen!?
Vielleicht stell ich mich da jetzt auch besonders dumm an, aber ich komm nicht dahinter!?Definiere ein oder mehrere Kriterien (wie z.B. Abweichungen von den Vorgabegrössen) um eine Lösung zu bewerten. Wähle die Lösung mit der besseren Bewertung.



Die Breite des festen Stehers is "egal", d.h. ich möchte mich am Anfang nicht auf die Breite eines Stehers festlegen (da es ja passieren kann, dass diese angepasst werden kann). Wichtig ist nur der "Mittelpunkt" des Stehers; der darf nicht angepasst werden.Und damit ist ein weiterer Lösungsansatz nicht vollständig brauchbar. Langsam habe ich das Gefühl, ich stecke meine Energie hier für nichts und wieder nichts rein. :(

atmosfear
30.08.2005, 07:47
Hallo Tom!

Schade. Hast du überhaupt schon Programmiererfahrung?
Ja, die habe ich definitiv!
Aber ist es dir noch nie so ergangen, dass du die Lösung eines Problems einfach nicht sehen willst und total auf der Leitung stehst?

Langsam habe ich das Gefühl, ich stecke meine Energie hier für nichts und wieder nichts rein.
Wenn du es so siehst dann tut's mir leid, dass ich dich beansprucht habe!

Auf alle Fälle bedanke ich mich für deine wertvollen Tipps und vor allem deine Geduld mit mir! Ich werde mich in den nächsten Tag noch einem hinsetzen, das Problem von vorne angehen und sehen was dabei rauskommt!

Vielen, lieben Dank!
atmosfear