簡體   English   中英

是否存在“矩陣樣式”比較的模式?

[英]Is there a pattern for a “matrix style” comparison?

是否存在用於以下決策風格的規范算法或模式:您有n個資源(現在說兩個,資源1和資源2)。 考慮偽代碼:

Request for X units, requiring resources 1 and 2 {
If (enough of resource 1)
   if (enough of resource 2)
      fulfill request for X units. 
   else (not enough of resource 2)
      partially fulfill, to max of resource 2
else (not enough of resource 1)
   if (there is enough of resource 2)
      partially fulfill, to max of resource 1. 
   else (not enough of resource 2)
      partially fulfill, to max of resource 2
}

當n> 2時,事情很快就會失控,並且有很多重復的代碼。 有沒有更有效的方法來實現此算法?

如果這個問題很重要,我正在用Javascript編程。

我將遍歷每種資源,假設所有其他資源都可用,那么每次計算我可以從中利用多少產品,並將生產限制在所有計划的最低數量。 這基本上是通過所述資源,這是由所支持的折疊 reduce 方法

好,這是一個示例,您可以設置任意數量的資源,將它們與鍵關聯,並設置所需的單位數量和每種資源的成本。 有2個函數,一個函數使用您擁有的資源獲得最大的單位,另一個函數消耗這些資源:

function Request(qty){
    this.quantity = qty; // quantity of units to make
    this.required = {}; // required resources
    var request = this;

    this.checkAvailability = function(resources){
        var available = request.quantity;
        var spent = {};
        var left = {};
        for(var key in request.required){ // for each required resource
            var max = Math.min(request.quantity, Math.floor(resources[key].quantity/request.required[key])) // set max as wanted quantity or available quantity if it is less than wanted
            available = Math.min(max, available) // update max of units you can make 
        }
        return available
    }

    this.spendResources = function(resources, qty){ // spend required resources
        for(var key in request.required){
            resources[key].quantity -= request.required[key]*qty;
        }
    }

}

function Resource(qty){
    this.quantity = qty;
}

var available = {
    1: new Resource(200),
    2: new Resource(140)
}

var request = new Request(7)
request.required = {1: 40, 2: 30}
var availableQty = request.checkAvailability(available)
request.spendResources(available, availableQty)
console.log(availableQty, available)

工作的Jsfiddle: http//jsfiddle.net/fk6coz8a/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM