題目大意:
這是一道模板題。題解:本題中你需要求解乙個標準型線性規劃:
有n個實數變數x1,x2,⋯,xn和m條約束,其中第i條約束形如aij*xj≤bi ,j∈(1,n),i∈(1,m)
此外這n個變數需要滿足非負性限制,即xj≥0。
在滿足上述所有條件的情況下,你需要指定每個變數xj的取值,使得目標函式f=cj*xj ,j∈(1,n)的值最大。
輸入格式
第一行三個正整數 n,m,t。其中t∈。
第二行有n個整數c1,c2,⋯,cn,整數間均用乙個空格分隔。
接下來m行,每行代表一條約束,其中第i行有n+1個整數ai1,ai2,⋯,ain,bi,整數間均用乙個空格分隔。
輸出格式
如果不存在滿足所有約束的解,僅輸出一行」infeasible」。
如果對於任意的m,都存在一組解使得目標函式的值大於m,僅輸出一行」unbounded」。
否則,第一行輸出乙個實數,表示目標函式的最大值f。當第一行與標準答案的相對誤差或絕對誤差不超過10−6,你的答案被判為正確。
如果t=1,那麼你還需要輸出第二行,用空格隔開的n個非負實數,表示此時x1,x2,⋯,xn的取值,如有多組方案請任意輸出其中乙個。
判斷第二行是否合法時,我們首先檢驗f−cjxj,j∈(1,n)是否為0,再對於所有ii,檢驗min是否為0。檢驗時我們會將其中大於0的項和不大於0的項的絕對值分別相加得到s+和s−,如果s+和s−的相對誤差或絕對誤差不超過10−6,則判為正確。
如果t=0,或者出現infeasible或unbounded時,不需要輸出第二行。
單純形法
這個人講得很清楚。
-update 2017/3/20
對了,對於是否有初始可行解的話,initialize這個函式是一種方法,但是可能會有點慢。大多時候都利用對偶原理來轉化模型。額奧爺爺說當c都是負的時候才用對偶(?)
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define maxn 25
const
double eps=0.00000001,inf=1e15;
int n,m,id[maxn*2];
double a[maxn][maxn];//a[i][j]:i表第幾條約束 j表第幾個元素
double myabs(double x)
//a[0][i] -> ci 目標函式中第i個元素係數
//a[i][0] -> bi 第i條約束中的常數
//a[i][j] -> aij 第i條約束中第j個元素的係數
//最大化 sigma(ci*xi),i∈n
//約束 xj=bj-sigma(aji*xi) ,j∈b
//轉軸
void pivot(int l,int e)
//替入變數xe∈非基本變數(1~n) 替出變數xl∈基本變數(n+1~n+m)
}//初始化
//方法一:引入乙個輔助線性規劃 要求最大化-x0
//約束為 xj=bj-sigma(aji*xi)+x0 ,j∈b然後用x0替換bj為負的約束
//下面的是方法二:
bool initialize()
pivot(l,e);
//在bi為負的時候,把所有基變數設為0不是一組合法的初始解
//所以選擇乙個bi為負的基變數x[i+n]
//然後在該約束右邊找乙個係數為正(即原係數為負)的非基變數進行轉軸操作
//如果沒有係數為正顯然就無解了
}return1;}
//最優化
bool ******x()
if (!e) break;
//如果目標變數ci都小於0 那麼最優解就是非基變數都為0
for (i=1;i<=m;i++)
if (a[i][e]>eps && a[i][0]/a[i][e]0]/a[i][e],l=i;
//在所有的式子中找出包含當前選中項(係數不為0)且最緊的一項
if (!l)
//如果所有的a[i][e]都小於0,說明最優值正無窮
pivot(l,e);
}return1;}
double ans[maxn];
int main()
for (i=1;i<=n;i++) id[i]=i;
if (initialize() && ******x())
}return
0;}
UOJ 179 線性規劃(單純形)
傳送門 題解 雖然標程掛了,不過還是勉強能用的。初始條件 max jc jaj jai,jxj bjxi 0max j cjaj jai jxj bjx i 0最優化過程 假設一開始滿足所有bj 0b j 0。1.找到ci c i為正數的xi x i。2.找到bj xj,i b jx j,i最小的j...
線性規劃 單純形法
線性規劃是求乙個線性多項式的最值。線性規劃有兩種形式 1.標準型 不等式型 2.鬆弛型 除了非負約束,其他都是等式變數名稱 在res x y z中。1.基本變數,基本變數是res。2.非基本變數,如x,y,z。單純形法 適用於鬆弛型。單純形法是不斷通過迭代來增大最大值。達到無法更新時,就是最大值。這...
線性規劃 單純形法
單純形法 x method 單純形法的思路總結 其它情況 參考文獻 目標函式是線性的,約束條件是線性等式或不等式,每個變數都取實數值.minimize ct xsubject to ax bx 0 begin text c x text a x b x geq 0 end minimize subj...