Zahlenkombinationen mit S7 errechnen

Steve81

Level-1
Beiträge
505
Reaktionspunkte
77
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

hab eine ziemlich kniffelige Aufgabe gestellt bekommen.
Ich habe einen variablen Sollwert (z.B. 86) den ich so genau wie möglich durch die Addition von max. 10 anderen Werten (ebenfalls variabel z.B. 23,45,12,20,...) errechnen soll. Wieviel der 10 Werte ich Addieren muss ist egal.
Meiner Meinung nach muss ich alle Kombinationsmöglichkeiten ausrechnen um so nahe wie möglich an den Sollwert zu kommen (außer eine Kombination ergibt genau den Sollwert).
Hat schon mal jemand von euch so was gemacht?
Ich denke ich muss es in SCL programmieren oder hat jemand ne andere Idee?
 
Klingt nach Schulaufgabe. (oder?)

Also wenn das der Fall ist dann erfinden die Lehrer ja meist solche Aufgaben ja nicht wirklich komplett neu. Also die Aufgabenstellung kenne ich jetzt nicht wenn das aber ein bekanntes Problem aus dem Bereich der Informatik ist dann gibt es im Netzt sicher Lösungsalgorithmen für die Aufgabe. Ich habe aber gerade kein Plan wie sich der hier nennen könnte.

Die Umsetzung wird sicher am Einfachsten in SCL gehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hört sich an wie so eine Waage zum verpacken von z.B. Lebensmittel in Tüten. Wenn man hin und wieder die Reportagen auf N24 schaut, sieht man die ständig :) . Ist es was in der Art?
 
Optimales Packen

Soweit ich das beurteilen kann ist es das Rucksackproblem.
Kannst ja mal danach suchen.
Das Problem besteht darin, den Rucksack so zu packen,
dass er möglichst voll ist.
Also ein Optimierungsproblem. Tritt zB beim Laden von
Lastern auf.

Auf Wikipedia ist das recht gut beschrieben, mit Algorithmus.
Bei max. 10 Werten kommt man aber auch zum Ziel,
wenn man alle Kombinationen ausprobiert.
 
Zuletzt bearbeitet:
Hallo Kollegen,

hab eine ziemlich kniffelige Aufgabe gestellt bekommen.
Ich habe einen variablen Sollwert (z.B. 86) den ich so genau wie möglich durch die Addition von max. 10 anderen Werten (ebenfalls variabel z.B. 23,45,12,20,...) errechnen soll. Wieviel der 10 Werte ich Addieren muss ist egal.
Meiner Meinung nach muss ich alle Kombinationsmöglichkeiten ausrechnen um so nahe wie möglich an den Sollwert zu kommen (außer eine Kombination ergibt genau den Sollwert).
Hat schon mal jemand von euch so was gemacht?
Ich denke ich muss es in SCL programmieren oder hat jemand ne andere Idee?
Darf man auch 2- oder mehrmals den selben Wert nehmen zB 43+43?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Soweit ich das beurteilen kann ist es das Rucksackproblem.
Kannst ja mal danach suchen.
Das Problem besteht darin, den Rucksack so zu packen,
dass er möglichst voll ist.
Also ein Optimierungsproblem. Tritt zB beim Laden von
Lastern auf.

Da hast du Recht.
Das hier finde ich recht gut beschrieben: http://www.tinohempel.de/info/info/ti/rucksackproblem.htm
Mit Lösungsansatz in Java, was man aber leicht in SCL umsetzen kann:
http://www.deeds.informatik.tu-darm...S06/GDI2/web_folien/10-DynamischeProg-3x3.pdf
 
Also es handelt sich um eine Anwendung für die Abfüllung von Lebensmitteln. Ein Wert darf nicht doppelt verwendet werden außer er kommt bei den 10 Werten wirklich 2mal vor. Danke für eure Antworten, ich denke dass mir die JAVA-Lösung weiter hilft.
 
Ok, ich check das in Java nicht...
ich würde von 1023 herunterzählen und die Zahl binär auswerten.


zB Schleife von 1023....1
L #Zählwert
L 2#1000000000
UW
==0 //wenn null wird nicht gezählt
SPB W2
L #Gesamtwert
L #Wert 1
+D
T #Gesamtwert
W2: L #Zählwert
L 2#0100000000
UW
==0 //wenn null wird nicht gezählt
SPB W3
L #Gesamtwert
L #Wert 2
+D
T #Gesamtwert
W3:
usw. also alle 10 ausmaskierten Bits auswerten.... müssten dann eigentlich alle Möglichkeiten sein.

danach Differenz zu Sollwert errechnen, und beste Annäherung speichern.

(korrektur: Sprungmarken)
 
Zuletzt bearbeitet:
@Onkel Dagobert:

Ich denke wenn ich binär von 1 bis 1023 zähle sollte ich alle Kombinationen der 10 möglichen Zahlen herstellen können.
Jede Bitstelle entspricht einem Wert.

Innerhalb der Schleife (dass was als AWL zum Teil gepostet ist) dient dazu:
Es gibt Wert 1-10,
ist nun zB die Binärkombination:
1010101010 gerade "dran"
addiere ich die Zahlenwertinhalte von Zahl 10,8,6,4,2 - so wie die Bits die 1 sind.

bei
0001101100 addiere ich die Zahlenwertinhalte von Zahl 7,6,4,3.


Dazu makier ich das jeweilige Bit aus- habe es aber nur für Bit10 und Bit9 dargestellt- und akkumuliere den Gesamtwert.

Du hast aber vollkommen Recht das konnte niemand erkennen.
Vielleicht ist die Idee aber jetzt klarer.
 
@Onkel Dagobert:

Ich denke wenn ich binär von 1 bis 1023 zähle sollte ich alle Kombinationen der 10 möglichen Zahlen herstellen können.
Jede Bitstelle entspricht einem Wert.

Innerhalb der Schleife (dass was als AWL zum Teil gepostet ist) dient dazu:
Es gibt Wert 1-10,
ist nun zB die Binärkombination:
1010101010 gerade "dran"
addiere ich die Zahlenwertinhalte von Zahl 10,8,6,4,2 - so wie die Bits die 1 sind.

bei
0001101100 addiere ich die Zahlenwertinhalte von Zahl 7,6,4,3.


Dazu makier ich das jeweilige Bit aus- habe es aber nur für Bit10 und Bit9 dargestellt- und akkumuliere den Gesamtwert.

Du hast aber vollkommen Recht das konnte niemand erkennen.
Vielleicht ist die Idee aber jetzt klarer.

Ja, die Idee ist nicht dumm :)!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
vielleicht hilft dir auch folgender link (Pascal):

http://www.laurentianum.de/leinfo02.htm


Gruß, Onkel


Ich habe mir das Pascal Programm dort mal angeschaut:
http://www.laurentianum.de/backtr3.htm

läuft bei mir auch auf dem Rechner unter freepascal aber für ST/SCL müsste man außer einigen kleinen Änderungen (z.B. INT statt Integer) noch den rekursiven Programmaufruf von "try" in eine Schleife umwandeln. Dann sollte das ganze genau die Aufgabe erfüllen.
 
Habs auch bei mir ausprobiert und es sieht schon recht vielversprechend aus.:p
Für meine Anwendung kann ich das Programm vermutlich noch um einiges kürzen, da bei mir ja der "WERT" dem "GEWICHT" entspricht.
 
Hallo,

ich hab jetzt mal versucht mein Problem mit SCL zu lösen.
Funktioniert aber leider nicht. Bei MW0 bekomme ich immer den Wert der an G1 ansteht und bei MW2 bekomme ich immer eine 1.
Kann mir jemand weiterhelfen?

Projekt im Anhang.
 

Anhänge

  • Test.zip
    306,7 KB · Aufrufe: 10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

danke an diejehnigen die helfen wollten, habs jetzt aber selbst hinbekommen. Das Problem war die IF abfrage der INT werte I und J.
Da hat mir die Umwandlung und die &Verknüpfung nicht die richtigen Werte geliefert, da bei WORD_TO_BOOL nur das niedrigste Bit kopiert wird.

Wenn jemand die lösung sehen will, stell ichs rein, ansonsten behalt ichs für mich.

@borromeus:

Danke für den sehr hilfreichen Tip den ich hier nochmal zitiere:

Ich denke wenn ich binär von 1 bis 1023 zähle sollte ich alle Kombinationen der 10 möglichen Zahlen herstellen können.
Jede Bitstelle entspricht einem Wert.

Innerhalb der Schleife (dass was als AWL zum Teil gepostet ist) dient dazu:
Es gibt Wert 1-10,
ist nun zB die Binärkombination:
1010101010 gerade "dran"
addiere ich die Zahlenwertinhalte von Zahl 10,8,6,4,2 - so wie die Bits die 1 sind.

bei
0001101100 addiere ich die Zahlenwertinhalte von Zahl 7,6,4,3.


Dazu makier ich das jeweilige Bit aus- habe es aber nur für Bit10 und Bit9 dargestellt- und akkumuliere den Gesamtwert.
 
Zurück
Oben