|
|
Zielwert mittels Summe fester Werte annähern |
|
Rheese |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 14.09.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.09.2017, 12:12
Titel: Zielwert mittels Summe fester Werte annähern
|
|
|
|
|
Hallo liebes Forum,
Ich versuche im Moment einen Algorithmus zu finden, der mir aus drei gegebenen Werten einen Zielwert so genau wie möglich annähert. Also in meinem Fall muss ich drei Gewichte (0,76g, 0,19g, 0,057g) in bestimmter Anzahl so kombinieren, dass ich ein Zielgewicht mit so kleiner Abweichung vom vorgegebenen Wert wie möglich erreiche. Insgesamt habe ich etwa 1.000 Vorgabewerte, die in 10er-Paketen als Zeilenvektoren vorliegen (siehe Beispieldatei).
Eine Überlegung war nun, den Vorgabewert zunächst durch das größte Gewicht (0,76g) zu teilen, den Teil vor dem Komma als ersten Wert zu behalten und mit dem "Restgewicht" beim nächst kleineren Gewicht fortfahren. Nun habe ich aber das Problem, dass ich in einem Zeilenvektor nicht bei jeder Zahl die Ziffern vor und hinter dem Komma trennen kann. Gäbe es da eine Möglichkeit?
Und gibt es vieleicht ne effizientere und genauere Vorgehensweise zu diesem Problem ?
Gruß Rheese
Beschreibung: |
|
Download |
Dateiname: |
Zielgewicht.mat |
Dateigröße: |
230 Bytes |
Heruntergeladen: |
283 mal |
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 16.09.2017, 17:39
Titel: Re: Zielwert mittels Summe fester Werte annähern
|
|
|
|
|
Hallo Rheese,
Du hast also 3 Zahlen gegeben und sollst eine ganz-zahlige Linear-Kombination finden, die möglichst nah an einem Zielwert liegt:
Mit dem größten Gewicht zu beginnen, das kleiner ist als X, ist keine gute Wahl:
[code]X = 1.9
n_min = [0, 10, 0];[code]
Hier mit dem 0.76 Gewicht zu beginnen, wäre suboptimal.
Bei 0.759999999999 ist die Lösung auch eindeutig [1,0,0].
Wieso sind die "Vorgabewerte" in 10er Pakete zusammengefasst?
Zitat: |
Nun habe ich aber das Problem, dass ich in einem Zeilenvektor nicht bei jeder Zahl die Ziffern vor und hinter dem Komma trennen kann. |
Das verstehe ich nicht.
Das Problem ist nicht eindeutig, da 0.76 auch durch 4*0.19 ersetzt werden kann. Möchtest Du dann beide Lösungen bekommen?
Würde Dir ein Brute-Force Ansatz reichen? Das hängt davon ab, welche Größen-Ordnung die Ziel-Werte haben. Sollte es tausende von Möglichkeiten gäbe, ließe sich das noch hart vollständig durchprobieren jeweils mit 1:ceil(X / w(i)) Möglichkeiten pro Gewicht.
Effizienter ist hie aber eine ganz-zahlige Optimierung. Suche mal nach diesem Stichwort im Netz.
Gruß, Jan
|
|
|
Rheese |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 14.09.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.09.2017, 08:20
Titel:
|
|
Hallo Jan,
Danke, ich gucke mir das mal an und melde mich noch mal, falls ich noch fragen habe.
Gruß Rheese
|
|
|
Rheese |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 14.09.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.09.2017, 14:51
Titel: Ganzzahlige lineare Optimierung
|
|
|
|
|
Guten Tag,
Ich verstehe zwar die Idee hinter der ganzzahligen Optimierung, aber ich weiß noch nicht genau, wie ich das bei mir umsetzten kann.
Zitat: |
Du hast also 3 Zahlen gegeben und sollst eine ganz-zahlige Linear-Kombination finden, die möglichst nah an einem Zielwert liegt:
Code: ausblenden
w = [0.76, 0.19, 0.057];
n : [3 x 1] ganzzahlig
Finde n für bestimmtes X: w * n - X ergibt Minimum
Funktion ohne Link?
Mit dem größten Gewicht zu beginnen, das kleiner ist als X, ist keine gute Wahl:
[code]X = 1.9
n_min = [0, 10, 0];[code]
Hier mit dem 0.76 Gewicht zu beginnen, wäre suboptimal. |
Sind für den Code noch gewisse Add-Ons in Matlab Voraussetzung? Ich habe versucht das zu übernehmen, bzw selbst einzugeben, aber für manches habe ich keine Matlab Befehle gefunden. Wie lässt man zum Beispiel eine Funktion gegen einen Grenzwert laufen?
Und wäre es möglich die Werte x,y und z im Vektor n für alle 10 Vorgabewerte als 10x3 Matrix ausgeben zu lassen ?
Gruß Rheese
|
|
|
|
|
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.
|
|