2012-09-26 52 views
3

我正在嘗試使用Solver Foundation來創建將能夠解決線性規劃問題的應用程序。長話短說我在試圖將字符串表達式轉換爲Microsoft.SolverFoundation.Services.Term時被卡住了。將字符串轉換爲Solver Foundation中的約束「Term」

我想要做的是添加一個字符串作爲模型的約束,但首先它必須轉換爲「期限」。

SolverContext context = SolverContext.GetContext(); 
Model model = context.CreateModel(); 

Decision vz = new Decision(Domain.IntegerNonnegative, "barrels_venezuela"); 
Decision sa = new Decision(Domain.IntegerNonnegative, "barrels_saudiarabia"); 
Decision se = new Decision(Domain.IntegerNonnegative, "barrels_saudiarabiad"); 
model.AddDecisions(vz,sa,se); 

string theTerm = "(20 * sa) + (15 * vz) + (3 * se)"; 
Term T = (Term)theTerm; 
model.AddConstraint("Name_of_constraint", T); 

我試過鑄造(如上)但無濟於事。

我該如何去傳遞一個字符串作爲可接受的術語addConstraint函數?

+0

'Term T =(Term)once'行中的'once'是什麼?它應該是'theTerm'嗎? –

+0

是的,我的歉意 – petestar

回答

2

你需要做的是使用Decision名:■而不是變量的名稱,並讓AddConstraint(string, string)過載爲您做解析。就像這樣:

string theTerm = "(20 * barrels_saudiarabia) + 
        (15 * barrels_venezuela) + (3 * barrels_saudiarabiad)"; 
model.AddConstraint("Name_of_constraint", theTerm); 

對於這項工作,表達串當然必須遵守Optimization Modeling Language規則。

+0

我明白,但我希望用戶指定「術語」,所以它通常會從一個文本框作爲字符串.. – petestar

+0

對不起,誤解的問題擺在首位。請看我更新的答案。 –

+0

完美的作品,謝謝。 – petestar