2017-08-11 55 views
0

我在Matlab中使用linprog函數來解決一組大的線性規劃問題。對於所有變量,我有2601個決策變量,51個不等式約束,71個等式約束和0的下界。用Matlab進行線性規劃的單純形法問題(linprog funcion)

目標函數和約束的係數因不同問題而異。我正在使用單純形法(當我嘗試使用活動集和內部點時,程序從不停止運行,只要我已經等待了超過幾個小時)。

單純形法對於一些問題收斂速度非常快,並且對於一些它們(也非常快)的示出了這樣的信息:

退出:約束條件是過於嚴格的;找不到可行的起點。

然而,即使是那些有這種信息的人,它仍然提供了滿足約束條件的解決方案。我是否可以忽略該消息並使用解決方案,或者該消息很重要,解決方案可能不是最佳選擇?

更新:事實證明,內點法解決其中一些,但其他人。所以在下面的代碼中,我使用內點方法與其一起工作,而單純方法與其餘。

These are my files這是我的代碼:

clc; clear; 

%distances 
t1 = readtable('t.xlsx', 'ReadVariableNames',false); 
ti = table2array(t1); 
sz = size(ti); 
tiv = reshape(ti, [1,sz(1)*sz(2)]); 

%crude oil production and attraction 
A = readtable('A.xlsx', 'ReadVariableNames',false); 
Ai = table2array(A); 
P = readtable('P.xlsx', 'ReadVariableNames',false); 
Pi = table2array(P); 

%others 
one1 = readtable('A Matrix.xlsx', 'ReadVariableNames',false); 
one = table2array(one1); 
two1 = readtable('Aeq Matrix.xlsx', 'ReadVariableNames',false); 
two = table2array(two1); 
zero = zeros(sz(1), sz(1)); 
infin = inf(sz(1), sz(1)); 
zerov = reshape(zero, [1,sz(1)*sz(2)]); 
infinv = reshape(infin, [1,sz(1)*sz(2)]); 

%OF 
f = (tiv).^1; 

%linear program 
%x = linprog(f,A,b,Aeq,beq,lb,ub) 
options1 = optimoptions('linprog','Algorithm','interior-point'); 
options2 = optimoptions('linprog','Algorithm','simplex'); 
x1999 = vec2mat(linprog(f,one,Pi(1,1:end),two,Ai(1,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2000 = vec2mat(linprog(f,one,Pi(2,1:end),two,Ai(2,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2001 = vec2mat(linprog(f,one,Pi(3,1:end),two,Ai(3,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2002 = vec2mat(linprog(f,one,Pi(4,1:end),two,Ai(4,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2003 = vec2mat(linprog(f,one,Pi(5,1:end),two,Ai(5,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2004 = vec2mat(linprog(f,one,Pi(6,1:end),two,Ai(6,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2005 = vec2mat(linprog(f,one,Pi(7,1:end),two,Ai(7,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2006 = vec2mat(linprog(f,one,Pi(8,1:end),two,Ai(8,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2007 = vec2mat(linprog(f,one,Pi(9,1:end),two,Ai(9,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2008 = vec2mat(linprog(f,one,Pi(10,1:end),two,Ai(10,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2009 = vec2mat(linprog(f,one,Pi(11,1:end),two,Ai(11,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2010 = vec2mat(linprog(f,one,Pi(12,1:end),two,Ai(12,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2011 = vec2mat(linprog(f,one,Pi(13,1:end),two,Ai(13,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2012 = vec2mat(linprog(f,one,Pi(14,1:end),two,Ai(14,1:end),zerov,infinv,zerov,options1),sz(1)); 
x2013 = vec2mat(linprog(f,one,Pi(15,1:end),two,Ai(15,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2014 = vec2mat(linprog(f,one,Pi(16,1:end),two,Ai(16,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2015 = vec2mat(linprog(f,one,Pi(17,1:end),two,Ai(17,1:end),zerov,infinv,zerov,options2),sz(1)); 
x2016 = vec2mat(linprog(f,one,Pi(18,1:end),two,Ai(18,1:end),zerov,infinv,zerov,options1),sz(1)); 
+0

你不能忽視這一點,如果沒有找到BFS,那麼還沒有執行優化。也許你有一些需要精確度很高的約束條件才能得到滿足,例如兩個不平等一起暗示着平等。如果你顯示一些信息可能會有所幫助,最好是你可以做的最小的失敗問題。 – harold

+0

我添加了代碼和我的輸入文件。感謝您花時間在此。 – Fred

+0

我也有linprog的一些問題,看看IBM CPLEX for Matlab,它免費供學術使用http://www-03.ibm.com/software/products/fr/ibmilogcpleoptistud – Marouen

回答

0

如果有人想知道問題是什麼,我發現,有錯誤的程序,實際上是不可行的點,什麼錯誤說的是正確。我通過對目標函數的係數運行相同的線性程序和零矢量,並得到相同的錯誤(由Matlab手冊推薦的方法)來發現它。