Autor Beitrag
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Fr 16.05.08 16:42 
Hallo zusammen,

ich versuche gerade ein lineares Gleichungssystem mit 2 Unbekannten und einer Gleichung zu optimieren. Für eine lineare Zielfunktion gibt's ja den Simplexalgorithmus, den ich hier gefunden und implementiert habe. Für meinen einfachen Fall reicht eine geometrische Lösung zwar aus, jedoch bei mehr als 2 Unbekannten wird es wiederum schwieriger.

Mein Gleichungssystem lautet:
0.808x_1 + 1x_2 = 0.167

Lineare Zielfunktion:
Summe aller x soll minimiert werden: Z = x_1 + x_2

Dafür liefert mir die graphische Lösung sowie der Simplexalgorithmus:
x_1 = 0
x_2 = 0.167

Quadratische Zielfunktion:
Summe aller x-Quadrate soll minimiert werden: Z = x_1^2 + x_2^2

Dafür liefert mir die graphische Lösung:
x_1 = 0.08
x_2 = 0.1

Der Simplexalgorithmus kann nur für lineare Zielfunktionen benutzt werden. Welchen Algorithmus benutz' ich denn für quadratische Zielfunktionen?

Gruß

Calculon
--
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Fr 16.05.08 18:28 
Wenn es nur Potenzen sind(keine Winkel oder Logarhythmen) könnte partielles Differenzieren helfen.
Schrittweise nach jeder Variablen 1 mal differenzieren. Dort nach Nullstellen suchen -> Extremalpunkte.
Die Werte dieser Extremalpunkte vergleichen -> niedriegsten merken.
Nun noch von den Randlösungen die Werte berechen. Sind alle Randwerte größer so hast Du mit den niedrigtes Extremalpunkt das Minimum.


//Lese gerade genauer.
Da es sich um die Quadrate handelt ist das Differenzial linear. Vielleicht hilft hier Simplex.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 16.05.08 20:02 
z. b. de.wikipedia.org/wik...ische_Programmierung auf dynamische programmierung. kommt aber sehr auf deinen fall an.

hast recht, die lineare optimierung ist hierfür nicht mehr brauchbar...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 16.05.08 23:38 
hmmm, ich würde's rein klassisch versuchen:

ax+by=c

x=(by-c)/a
y=(ax-c)/b

entweder x oder y im folgenden Schritt nehmen:

Z=x^2+y^2

Für x oder y jetzt die umgestellte Gleichung einsetzen:

Z=x^2+((ax-c)/b)^2
Z=((by-c)/b)^2+y^2

Z nun einmal ableiten (überlass ich dem Threadstarter) und Nullstellen suchen (Hab ich jetzt auch grad keine Lust zu rechnen).

Danach zweite Ableitung von Z bilden und auf Minimum\Maximum prüfen.

Wenn ich mich nicht vertan hab, sollte man damit recht einfach vorwärts kommen. Wenn man nun für x oder y nen Wert hat, zurück substituieren und in die Original-Gleichung einsetzen und ausrechnen.

HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Calculon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Fr 16.05.08 23:54 
user profile iconBenBE hat folgendes geschrieben:
hmmm, ich würde's rein klassisch versuchen:

ax+by=c

x=(by-c)/a
y=(ax-c)/b

entweder x oder y im folgenden Schritt nehmen:

Z=x^2+y^2

Für x oder y jetzt die umgestellte Gleichung einsetzen:

Z=x^2+((ax-c)/b)^2
Z=((by-c)/b)^2+y^2

Z nun einmal ableiten (überlass ich dem Threadstarter) und Nullstellen suchen (Hab ich jetzt auch grad keine Lust zu rechnen).

Danach zweite Ableitung von Z bilden und auf Minimum\Maximum prüfen.

Wenn ich mich nicht vertan hab, sollte man damit recht einfach vorwärts kommen. Wenn man nun für x oder y nen Wert hat, zurück substituieren und in die Original-Gleichung einsetzen und ausrechnen.

HTH.

Okay, das ist jetzt'n analytischer Weg die Sache zu handlen. Aber da später etwa bis zu 200 Unbekannte auftreten können würde ich das Ganze gerne numerisch handlen. Ich weiß' nur nicht nach welchen Verfahren/Methoden/Algorithmen ich suchen soll...

BTW.: Wusstet ihr, dass in kommerzieller Software so unsere Muskelkräfte bei gewissen Beanspruchungen berechnet werden? Die Muskelaktivitäten müssen wegen der redundanten Anzahl von Muskeln irgendwie verteilt werden. Da benutzt man die Zielfunktion: Summe aller Muskelkräfte^2 soll minimal sein...

Gruß

Calculon
--
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.05.08 09:23 
falls es sich rein und ausschliesslich um quadradische gleichungen handelt, kannst du ein modifiziertes symplex verwenden. sieh hierzu: Suche bei Google QUADRATIC PROGRAMMING das sollte dir weiterhelfen.

ansonsten ist hierfür i.a.R. als gernallösung die Suche bei Google DYNAMIC PROGRAMMING anzusehen.

<HTH> GG
Calculon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Sa 17.05.08 19:49 
user profile iconGrenzgaenger hat folgendes geschrieben:
falls es sich rein und ausschliesslich um quadradische gleichungen handelt, kannst du ein modifiziertes symplex verwenden. sieh hierzu: Suche bei Google QUADRATIC PROGRAMMING das sollte dir weiterhelfen. [..]

Danke, werd' ich mir mal ankucken!

Gruß

Calculon
--