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

Optimierungsproblem (Alternativ für Excel Solver)

 

SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 10:06     Titel:
  Antworten mit Zitat      
Was genau meinst du denn mit untereinanderhängen? Embarassed
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.07.2017, 10:32     Titel:
  Antworten mit Zitat      
Hallo,

Code:
A = [A1; A2];
b = [b1; b2];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 11:19     Titel:
  Antworten mit Zitat      
So habe ich es versucht vorhin. Aber ich erhalte die Meldung:

The number of rows in A must be the same as the number of elements of b.

Also ich habe die Preisliste (A) in eine 2. Spalte kopiert > A2
und für b habe ich eine Spalte mit 0en und eine mit 4en erstellt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.07.2017, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

dann wird die Situation in irgendeiner Form anders sein als ich gedacht habe.

Die Meldung ist ja recht klar. Es empfiehlt sich also ein Blick in den Workspace um zu sehen, was die Dimensionen der Variablen sind. Wenn das nicht weiterhilft, dann bitte den momentanen Code hier posten - am besten so, dass man das Problem reproduzieren kann.

Zitat:
Also ich habe die Preisliste (A) in eine 2. Spalte kopiert > A2

Was du damit bezweckst ist mir nicht klar. A steht bei Optimierungsproblemen allgemein für die Matrix in den linearen Ungleichungsnebenbedingungen A*x <= b.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2017, 09:35     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Code:
A = [A1; A2];
b = [b1; b2];


Grüße,
Harald


Weil du hier ja meintest, A1;A2...deswegen hatte ich die Liste einfach verdoppelt.

Code:

%%Einlesen der Informationen (100 Preise)
A=xlsread('Test2.xlsx');

% Berechnung der Konstanten vor den Variablen

f = [-A/(0.95*2)/4, A/4]';
f = f(:);

%Aufstellen der Nebenbedingung für 100 Einheiten

M = zeros(100, 200);
M(1, 1:2) = [0.5, -1];
for k = 2:100
    M(k, :) = M(k-1, :);
    M(k, 2*k-1:2*k) = [0.5, -1];
end

%Zusätzliche Definitionen

intcon=200;
Meq=[];
beq=[];
b=zeros(100,1);


%Schranken für X und Y (100 Einheiten)

lb=zeros(200,1);
ub=ones(200,1);

%Solver-Funktion

X=intlinprog (f,intcon,M,b,Meq,beq,lb,ub);
 


So klappt es, dass die Nebenbedingung M immer größer 0 bleibt. Jedoch übersteigt M den Wert 4. Und wenn ich für b ein vektor mit 100 4en aufstelle, dann bleibt die Nebenbedingung immer unter 4, geht aber in den Minusbereich rein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2017, 19:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Weil du hier ja meintest, A1;A2...

Deinen aktuellen Code hatte ich leider nicht.

Zitat:
deswegen hatte ich die Liste einfach verdoppelt.

Das ist nun wirklich nicht sinnvoll.

Du musst nach deiner Variablenbenennung zwei Matrizen M1 und M2 erzeugen, eine für die >=0 - Ungleichungen und eine für die <=4 - Ungleichungen, und diese untereinanderhängen und so ein größeres M erzeugen. Dann dazu passend ein größeres b erzeugen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2017, 09:33     Titel:
  Antworten mit Zitat      
Meinst du 2 solche Matrizen? oder 2 in einer Schleife?

Code:
M2 = zeros(100, 200);
M2(1, 1:2) = [0.5, -1];
for k = 2:100
    M2(k, :) = M2(k-1, :);
    M2(k, 2*k-1:2*k) = [0.5, -1];
end
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2017, 10:41     Titel:
  Antworten mit Zitat      
Lieber Harald, leider konnte ich das Problem nicht endgültig lösen. Ich hoffe du kannst mir noch den letzten entscheidenden Tipp geben. Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2017, 15:18     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte dir ja meinen Vorschlag geschrieben. Die Rückfrage verstehe ich nicht.
Wenn du Wochen später nachfragst, entsteht zudem das Problem, dass man sich von neuem in deine Fragestellung hineindenken muss.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2017, 09:36     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:


Du musst nach deiner Variablenbenennung zwei Matrizen M1 und M2 erzeugen, eine für die >=0 - Ungleichungen und eine für die <=4 - Ungleichungen, und diese untereinanderhängen und so ein größeres M erzeugen. Dann dazu passend ein größeres b erzeugen.

Grüße,
Harald


Stimmt, ist etwas länger her. Sorry. Das mit dem untereinanderhängen habe ich leider nicht verstanden.

Code:

M1 = zeros(100, 200);
M1(1, 1:2) = [0.5, -1];
for k = 2:100
    M1(k, :) = M1(k-1, :);
    M1(k, 2*k-1:2*k) = [0.5, -1];
end


M2 = zeros(100, 200);
M2(1, 1:2) = [0.5, -1];
for k = 2:100
    M2(k, :) = M2(k-1, :);
    M2(k, 2*k-1:2*k) = [0.5, -1];
end


In dieser Form? Oder kann man beide in einer Schleife verbinden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2017, 08:16     Titel:
  Antworten mit Zitat      
Hallo,

du kannst auch beide Matrizen in einer Schleife anlegen, was ich aber aus Gründen der Übersichtlichkeit lassen würde.
Viel wichtiger: eine der Matrizen muss die <= Ungleichungen enthalten, die andere die >= Ungleichungen. Bei einer der Matrizen musst du also die Vorzeichen tauschen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2017, 10:47     Titel:
  Antworten mit Zitat      
Code:

%%Einlesen der Informationen (100 Preise)
A=xlsread('Test2.xlsx');

% Berechnung der Konstanten vor den Variablen

f = [-A/(0.95*2)/4, A/4]';
f = f(:);

%Aufstellen der Nebenbedingung für 100 Einheiten

%M1 für kleiner 4

M1 = zeros(100, 200);
M1(1, 1:2) = [0.5, -1];
for k = 2:100
    M1(k, :) = M1(k-1, :);
    M1(k, 2*k-1:2*k) = [0.5, -1];
end

% M2 für größer 0
M2 = zeros(100, 200);
M2(1, 1:2) = [-0.5, 1];
for k = 2:100
    M2(k, :) = M2(k-1, :);
    M2(k, 2*k-1:2*k) = [-0.5, 1];
end

%Zusätzliche Definitionen

intcon=200;
Meq=[];
beq=[];

%Vektor mit 100 4en
b1=xlsread('b4.xlsx');

b2=zeros(100,1);


%Schranken für X und Y (100 Einheiten)

lb=zeros(200,1);
ub=ones(200,1);

%Solver-Funktion

X=intlinprog (f,intcon,M1,M2,b1,b2,Meq,beq,lb,ub);
 


Ich habe nun 2 Matrizen M1 und M2 aufgestellt und dementsprechend auch 2 b-Vektoren. Aber leider klappt es so nicht. Muss ich für intlinprog die M´s und b´s irgendwie zusammenfassen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2017, 12:10     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Aber leider klappt es so nicht.

Gibt es eine Fehlermeldung? Unerwartete Ergebnisse? Fängt dein Computer an zu klappern oder sendet er Rauchzeichen?

Zitat:
Muss ich für intlinprog die M´s und b´s irgendwie zusammenfassen?

Ja, denn momentan wird das erste Paar als Gleichungsnebenbedingungen aufgefasst. Das kannst du auch aus der Dokumentation herausfinden.
Ich hatte dir auch schon geschrieben wie du das zusammenfassen musst, siehe 04.07.2017, 11:32. Nur eben mit Buchstaben M statt A, weil du dich für diese unübliche Benennung entschieden hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2017, 13:24     Titel:
  Antworten mit Zitat      
Wow. Endlich hat es geklappt. Ich bedanke mich sehr bei dir. Es funktioniert wunderbar und super schnell. PN
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2017, 16:08     Titel:
  Antworten mit Zitat      
Hallo Selman,

danke für die Rückmeldung. Schön, dass du es geschafft hast.
Ich kann hier z.Z. keine PNs schicken. Vielleicht ja morgen.

Viele Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

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.