WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zielwert mittels Summe fester Werte annähern

 

Rheese
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2017, 12:12     Titel: Zielwert mittels Summe fester Werte annähern
  Antworten mit Zitat      
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

Zielgewicht.mat
 Beschreibung:

Download
 Dateiname:  Zielgewicht.mat
 Dateigröße:  230 Bytes
 Heruntergeladen:  283 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.09.2017, 17:39     Titel: Re: Zielwert mittels Summe fester Werte annähern
  Antworten mit Zitat      
Hallo Rheese,

Du hast also 3 Zahlen gegeben und sollst eine ganz-zahlige Linear-Kombination finden, die möglichst nah an einem Zielwert liegt:
Code:
w = [0.76, 0.19, 0.057];
n : [3 x 1] ganzzahlig
Finde n für bestimmtes X: w * n - X ergibt Minimum


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Rheese
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2017, 08:20     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke, ich gucke mir das mal an und melde mich noch mal, falls ich noch fragen habe.

Gruß Rheese
Private Nachricht senden Benutzer-Profile anzeigen
 
Rheese
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2017, 14:51     Titel: Ganzzahlige lineare Optimierung
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.