2017-06-03 120 views
1

我想在我的android應用程序中使用cpl-java構建新的線性編程模型。示例如何使用clp-java

我的功能是E + T + U + URAM,我希望儘量減少這個功能,但我不知道如何使用這個庫以及如何添加我的限制, 我的約束:

E<0 and T<0 and U<0.25 and URam<0.25 

這是我的代碼

com.quantego.clp.CLP model = new CLP(); 

    CLPVariable energy = model.addVariable().free(); 
    CLPVariable executionTime = model.addVariable().free(); 
    CLPVariable cpuUsage = model.addVariable().free(); 
    CLPVariable ramUsage = model.addVariable().free(); 

    CLPExpression expression = model.createExpression().add(energy).add(executionTime).add(cpuUsage) 
      .add(ramUsage); 

    System.out.println("expression : " + expression.toString()); 
    TreeMap<CLPVariable, Double> energyMap = new TreeMap<>(); 
    energyMap.put(energy, 5.1); 

    TreeMap<CLPVariable, Double> exeTimeMap = new TreeMap<>(); 
    exeTimeMap.put(executionTime, 5.0); 

    TreeMap<CLPVariable, Double> cpuusageMap = new TreeMap<>(); 
    cpuusageMap.put(cpuUsage, 0.2); 

    TreeMap<CLPVariable, Double> ramusageMap = new TreeMap<>(); 
    ramusageMap.put(ramUsage, 0.9); 

    model.addConstraint(energyMap, CLPConstraint.TYPE.LEQ, 0); 
    model.addConstraint(exeTimeMap, CLPConstraint.TYPE.LEQ, 0); 
    model.addConstraint(cpuusageMap, CLPConstraint.TYPE.LEQ, 0.25); 
    model.addConstraint(ramusageMap, CLPConstraint.TYPE.LEQ, 0.25);  

回答

0

從你的描述,我推斷你希望儘量減少決策變量,E,T,U,URAM,受可變範圍的總和。由於不存在鏈接這些決策變量的約束,所以最優解決方案是將所有變量設置爲其下限。

從變量的名稱,我猜下邊界實際上是零而不是負無窮大。然後將所有變量設置爲零將最小化E + T + U + URam,這將產生零目標值。如果你想將負無窮作爲下限,那麼目前所述的優化問題將是無限的。

clp-java廣泛的配方如下:

CLP model = new CLP().verbose(1); 
CLPVariable energy = model.addVariable(); 
CLPVariable executionTime = model.addVariable(); 
CLPVariable cpuUsage = model.addVariable(); 
CLPVariable ramUsage = model.addVariable();  
model.createExpression().add(energy,executionTime,cpuUsage,ramUsage).asObjective(); 
model.createExpression().add(energy).leq(0); 
model.createExpression().add(executionTime).leq(0); 
model.createExpression().add(cpuUsage).leq(0.25); 
model.createExpression().add(ramUsage).leq(0.25); 
model.minimize(); 

這是否解決問題了嗎?