2017-06-06 15 views
0

翻一番我試圖使用Java,這裏的代碼的一部分從讀取Excel列中的值:轉換IloNumVar variabale在Java中

 ..... 
    List<ReportRow> listOfDataFromReport = new ArrayList<ReportRow>(); 
    for(int x = 1; x<=sheet.getPhysicalNumberOfRows(); x++){ 
    ReportRow rr = new ReportRow(); 
    HSSFRow dataRow = sheet.getRow(x); 

    int idxForColumn1 = map.get("Cost"); 
    int idxForColumn2 = map.get("Level"); 

    HSSFCell cell1 = dataRow.getCell(idxForColumn1); 
    HSSFCell cell2 = dataRow.getCell(idxForColumn2); 

    rr.setCost(cell1.getNumericCellValue()); 
    rr.setLevel(cell2.getNumericCellValue()); 

    ..... 

所以從Excel中讀取數據的代碼工作正常,問題我有是制定者的功能,因爲我沒有同類型的,我使用CPLEX求解另一個類:

private IloNumVar Cost = new IloNumVar; 

    public IloNumVar getCost() { 
     return Cost; 
    } 
    public void setCost(IloNumVar cost) { 
     Cost = cost; 
    } 

所以我得到這個錯誤:

The method setCost is not applicable for the arguments (double) 

所以我想知道是否有可能隱藏IloNumVar加倍或任何解決方案來使用它們兩個,獲得值爲雙重,但使用它作爲IloNumVar。

EDIT

爲了解釋更多,我使用電功率的值(從Excel)作爲輸入來使用它們來解決成本問題CPLEX解算器。

來讀取Excel中我只能用POIgetNumericCellValue()方法來獲取值的數據,所以我會有變量double,但是當我用它們來解決我的模型,因爲我想優化,我必須把它們作爲IloNumVar[] 24小時內能源成本的價值取決於從excel文件中獲取的權力值。

+0

如果您有來自Excel電子表格(或數據庫,文本文件或其他任何地方)的數字值,那麼這些數字就是簡單數字。當你說你想'用他們來解決我的模型',你是什麼意思?如果它們是已知值(即輸入數據),則通常不應將它們建模爲InlNumVars。 – TimChippingtonDerrick

回答

1

IloNumVar是一個CPLEX/Concert類,用於在CPLEX模型中對變量建模。在建模階段,它通常沒有單一的值。相反,您需要指定IloNumVar可以採用的值的範圍,通常是一個下限和一個上限。但是,通過將變量的下限和上限設置爲相同的值,可以將該變量設置爲始終具有單個值。在大多數情況下,這種情況很少見 - 可能是爲了將某些已知的值或決策強制爲調試模型。

一旦運行並解決了模型,那麼該變量應該有一個值,因爲CPLEX應該爲您選擇了一個值。然後,您可以使用類似getValue()的方法從IloNumVar中獲取該值。

現在觀察 - 在大多數模型中,像'成本'這樣的東西都是已知的常量值,我們希望CPLEX根據該已知成本來決定使用多少東西。通常,成本是目標函數中某些項的係數。在這種情況下,對這些已知值使用雙精度值是正常的。你對你的模型一言不發,所以我們不能告訴你在你的模型中使用了這些IloNumVars,這可能是一個好的設計決定。

+0

我瞭解你,但我有一些細節,你可以看到我的編輯上面請。 –