AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifen wiederholen

Ein Thema von Kegasetu · begonnen am 23. Okt 2020 · letzter Beitrag vom 2. Nov 2020
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#21

AW: Schleifen wiederholen

  Alt 23. Okt 2020, 12:35
Zitat:
Eine Norm ist mir nicht bekannt.
...das war eher als Scherz gedacht...in der EU wird ja alles "reguliert".
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#22

AW: Schleifen wiederholen

  Alt 23. Okt 2020, 13:03
Zitat:
Eine Norm ist mir nicht bekannt.
...das war eher als Scherz gedacht...in der EU wird ja alles "reguliert".
Warum? Das wäre jetzt nicht ungewöhnlich. Und europäisch eher weniger, wenn dann sitzt die DIN oder ISO dahinter.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#23

AW: Schleifen wiederholen

  Alt 23. Okt 2020, 13:29
[***H***|***H***|***H***]

Joar, wenn der Balken grade ist und sich nicht biegt, dann passt es ja.
Bei Biegen müsstest du aber an den |-Stellen ein Gelenk einbauen*1, da sich die dort zusammenlaufenden Biegungen gegenseitig beeinflussen*2, aber das lässt sich bestimmt auch direkt berechnen, ohne Schleifchen.

*1 um diesen Effekt zu eliminieren
*2 sich durch das gegenläufige Biegemoment hochheben, während die Enden weiter runter hängen, die äußeren H als Drehpunkt nutzen und die Mitte bissl "leichter" wird.



Kommt blos nicht auf die Idee ein gerades Regal bauen zu wollen, der für eure CNC berechnen zu wollen wie weit sich der Querträger in der Mitte durchbiegen würde.
$2B or not $2B

Geändert von himitsu (23. Okt 2020 um 13:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#24

AW: Schleifen wiederholen

  Alt 25. Okt 2020, 14:58
Ich weiß, spezifischer Ratschlag (oder gar Code) kommt immer besser an, als allgemeiner, aber ich probiere es mal

Ein passendes Sprichwort: "In der Informatik gibt es nur drei sinnvolle Maße: 0, 1 oder beliebig viele" (https://de.wikipedia.org/wiki/Zero_One_Infinity)

Insofern solltest du hier versuchen, beliebig viele Halterungen zuzulassen. Fassen wir also die Aufgabenstellung zusammen:
- Es gibt 1 Brett der Länge l
- Es gibt n Halterungen an n Stellen
Für letzteres solltest du ein dynamisches Array verwenden.

Dann kannst du in deiner Rechnung jeden Punkt separat verschieben. Eine Möglichkeit wäre z.B. sowas:
Delphi-Quellcode:
procedure Vary(Brettdaten: TBrettData; Punkte: Array of Double, idx: Integer);
var
  AlterWert: Double;
begin
  if (idx > Length(Punkte)) begin
    Solve(Brettdaten, Punkte)
  end
  // Variiere nur einen Punkt hier
  AlterWert := Punkte[idx];
  Punkte[idx] := AlterWert - 0.1;
  Vary(Brettdaten, Punkte, idx + 1);

  Punkte[idx] := AlterWert;
  Vary(Brettdaten, Punkte, idx + 1);

  Punkte[idx] := AlterWert + 0.1;
  Vary(Brettdaten, Punkte, idx + 1);
end;
Nebenbei möchte ich aber anmerken, dass du da ein relativ schlechtes Verfahren implementierst. Du machst noch nicht mal gradient descent, sondern zuppelst jede Dimension um 0.1 (Woher der Wert kommt .... ) und hoffst, dass du damit was erwischst ^^

Ein besseres Verfahren ist gradient descent, wo du für deinen Vektor (also alle n Lager) eine Ableitung berechnest (also wie stark Richtung Optimum bringen mich hier 0.1 ?) und dann in Richtung dieses Gradienten läufst.

Und noch besser wird das ganze, wenn du dein Problem in eine gängige Matrix-form bringen kannst, weil dann kannst du auf ungemein viele und gute Löser zurückgreifen.
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#25

AW: Schleifen wiederholen

  Alt 25. Okt 2020, 15:54
Hallo Zusammen.
Ich stoße mittlerweile ein Bisschen an meine Grenzen. Das Problem, ich will über einen Integer einen Wert eingeben, über welchen bestimmt wird, wie oft eine Schleife durchlaufen wird. Diese Schleifen können als Exponenten angesehen werden.

Hier ein kleines Beispiel zu der manuellen Lösung des Problems:

Delphi-Quellcode:
for z1 := 1 to 10 do
  begin
    l12 := l11 +0.1;
    l11 := l11 + 0.1;
      for z2 := 1 to 10 do
      begin
        l13 := l12 + 0.1;
        l12 := l12 + 0.1;
          for z3 := 1 to 10 do
          begin
          l14 := l13 + 0.1;
          l13 := l13 + 0.1;
            for z4 := 1 to 10 do
            begin
              l15:= l14 + 0.1;
              l14:= l14 + 0.1;
                for z5 := 1 to 10 do
                   ..
Das ist so natürlich überaus unpraktisch. Ich kam nun auf die Idee eine Funktion entsprechend zu erstellen, jedoch bin ich auch nach längerem Überlegen nicht auf eine Lösung gekommen...

Noch ein Hinweis, es werden maximal 20 Loops durchlaufen.

Hat jemand vielleicht eine Idee?
Rekursion?
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#26

AW: Schleifen wiederholen

  Alt 26. Okt 2020, 14:31
Also ich bin mir nicht mehr ganz sicher, wie ich weiterkommen soll. Ich will mein Problem mal so beschreiben.

Der Sachverhalt lautete wie folgt: Es gibt n Elemente, die auf k Stellen platziert werden können. Bedingung ist, dass sich alles der Reihe nach bewegen muss, also Elemente 1 wird niemals vor Element 2 sein. Hier ein Beispiel mit 5 Elementen und 7 Stellen.

*****---

****-*--

****--*-

****---*

***-**--

***-*-*-

***-*--*

**-***--

**-**-*-

**-**--*

*-****--

*-***-*-

*-***--*

-*****--

-****-*-

-****--*

-***-**-

-***-*-*

-**-***-

-**-**-*

-*-****-

-*-***-*
usw.

Von mir aus, packe ich die Längen auch alle in Arrays rein, aber bezüglich der Kombination bin ich mir unsicher.

Um das mal Verbal zu beschreiben: Am Anfang sind alle Halterungen im Abstand von 0,1 m voneinander entfernt. Dann geht die letzte Halterung bis ganz nach außen. Ist sie dort angekommen, dann rück die Vorletzte nach und die letzte Halterung ist wieder 0,1 m von der Vorletzten entfernt und bewegt sich nun nochmal bis ganz nach außen. Dann rückt die Vorvorletzte nach...
Leider bekomme ich es nicht hin, dieses logisch Problem zu verpacken...
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Schleifen wiederholen

  Alt 26. Okt 2020, 16:47
Also ich bin mir nicht mehr ganz sicher, wie ich weiterkommen soll. Ich will mein Problem mal so beschreiben.

Der Sachverhalt lautete wie folgt: Es gibt n Elemente, die auf k Stellen platziert werden können. Bedingung ist, dass sich alles der Reihe nach bewegen muss, also Elemente 1 wird niemals vor Element 2 sein. Hier ein Beispiel mit 5 Elementen und 7 Stellen.

*****---

****-*--

****--*-

****---*

[...]
Hi,

ich interpretiere mal, dass das mehrere Beispiele waren und in meinem Quote das erste Beispiel zu sehen ist. Dann ist das m.E. ein einfacheres Problem und auch ich würde hier einen (dynamischen) array vorschlagen.

Länge des arrays ist dann die Anzahl der Stellplätze.
Jeder einzelne Wert ist dann das "Objekt" (oder was auch immer da liegt)

Auf das Beispiel von dir bezogen:
Delphi-Quellcode:
SetLength(myArray, 8);
myArray[0] := 1;
myArray[1] := 2;
myArray[2] := 3;
myArray[3] := 4;
myArray[4] := 5;
myArray[5] := 0;
myArray[6] := 0;
myArray[7] := 0;
Dann hättest du die Vorgabe dafür und musst nur noch eine Routine schreiben, welche die Items (Bei mir die Integer 1-5) beginnend mit dem letztmöglichen verschiebt.

Zumindest, wenn ich deine Aufgabe verstanden habe
Ansgar
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#28

AW: Schleifen wiederholen

  Alt 26. Okt 2020, 17:11
Das Problem, ein Balken mit mehr als zwei Halterungen gilt als unbestimmt. Nun gibt es Verfahren, um das zu lösen, aber meine Aufgabe lautet, alle Halterungen sollen in etwas gleich beansprucht werden. Um dies zu erreichen, will ich iterativ die Halterungen ein wenig verschieben und dann so lange rechnen, bis die Halterungen annähernd gleich viel Gewicht aufnehmen.
Interessantes Problem.
Da ich vom Fach bin, habe ich mir dazu mal ein paar Gedanken gemacht.

Wie wäre es mit einem anderen Lösungsansatz:
Du verteilst die Auflager zunächst gleichmäßig unter dem Balken. Damit hast du schon man eine Ausgangslage an Unterschieden in den Auflagerkräften. Dann verschiebst du die Auflager nur noch iterativ, bis alle in etwa die gleiche Auflagerkraft bekommen. Das Auflager mit der geringeren Auflagerkraft rückt näher an das benachbarte Auflager ran. Dann schaust du dir das nächste Feld an und so weiter.

Ist die Belastung eigentlich gleichmäßig verteilt? Dann kannst du die Verschiebungen ja gleich symetrisch durchführen.

Ich bin mir nicht sicher, ob das in allen Fällen funktioniert, insbesondere bei nicht gleichmäßg verteilter Belastung. Aber vielleicht ist das ein Denkanstoß.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#29

AW: Schleifen wiederholen

  Alt 26. Okt 2020, 17:18
Hi du,

ich würde im ersten Schritt nur die Positionen beachten und die Längen außen vor lassen.
Ich würde die Elemente auch nicht positionieren, sondern nur Elemente verteilen und am
Ende sagen "das Element ganz links ist Element 1, das daneben 2, ...", damit du
die Problematik erstmal aus dem Kopf bekommst.

Es bietet sich halt ein Array an mit der angegebenen Länge.
Dann halt eine Funktion, welche ein Element platziert.
Zunächst muss das erste Element im Bereich 0 bis L-N platziert werden.
Nur L-N, da du ja wenigstens Platz für die verbleibenden Elemente benötigst.
Danach wechselnd die verbleibenden Elemente aufteilen.
Unterm Strich also eine Liste mit allen Möchlichkeiten und dort dann je eine Liste mit den verwendeten Elementen.
"Array of Array of Boolean" vielleicht!? Funktion könnte für jeden Durchgang die Liste selbst erweitern,
oder du errechnest zuerst die Anzahl der Möglichkeiten und setzt die Listenlänge zuerst.
Letztes müsstest du machen, falls du zu viele Variationen hast und du sonst zu oft
die Listenlänge neu setzen würdest ... das müsste dann aber schon echt oft sein ... merkst du,
wenn dein Programm zu lange braucht ... Arraylängen neu setzen (=Arrays umkopieren) dauert auf
dem PC noch mit am Längsten.

Im Gegensatz zu meinem Vorgänger wäre das die "einfachere" Brute-Force-Methode.

Nur so als Denkanstoß. Ich hoffe das hilft bei der Lösungsfindung.

MfG
Incocnito
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#30

AW: Schleifen wiederholen

  Alt 26. Okt 2020, 20:24
Also ich bin mir nicht mehr ganz sicher, wie ich weiterkommen soll. Ich will mein Problem mal so beschreiben.

Der Sachverhalt lautete wie folgt: Es gibt n Elemente, die auf k Stellen platziert werden können. Bedingung ist, dass sich alles der Reihe nach bewegen muss, also Elemente 1 wird niemals vor Element 2 sein. Hier ein Beispiel mit 5 Elementen und 7 Stellen.

*****---

****-*--

****--*-

****---*

***-**--

***-*-*-

***-*--*

**-***--

**-**-*-

**-**--*

*-****--

*-***-*-

*-***--*

-*****--

-****-*-

-****--*

-***-**-

-***-*-*

-**-***-

-**-**-*

-*-****-

-*-***-*
usw.

Von mir aus, packe ich die Längen auch alle in Arrays rein, aber bezüglich der Kombination bin ich mir unsicher.

Um das mal Verbal zu beschreiben: Am Anfang sind alle Halterungen im Abstand von 0,1 m voneinander entfernt. Dann geht die letzte Halterung bis ganz nach außen. Ist sie dort angekommen, dann rück die Vorletzte nach und die letzte Halterung ist wieder 0,1 m von der Vorletzten entfernt und bewegt sich nun nochmal bis ganz nach außen. Dann rückt die Vorvorletzte nach...
Leider bekomme ich es nicht hin, dieses logisch Problem zu verpacken...


Wenn es so wie bei den Beispielen aussehen soll, könnte ich mir vorstellen dass man Binärzahlen hochzählt. Dann hätte man auch alle Positionen und würde sich so verhalten von rechts nach links. Weiß nicht ob das weiterhilft.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz