algorithm - How to assign N numbers into M pack that minimize some target function? -


i have n(for example 30) integer numbers v[i], , m(for example 8) packs, each pack have expected value p[j].

i want assign each integer number 1 pack, following expression calculate difference between sum of v[k] in pack j , expected value of pack j.

diff[j] = abs(p[j] - sum(v[k] in pack j)) 

the target find best solution minimize sum(diff[j]).

i don't know what's type of kind of problem. can solved linear programming, or np-complete problem?

regardless of whether np-hard or not, may able efficiently solve problem problem instances need using accessible integer programming software. problem, define x_{ij} define if x[i] assigned group j. define variables d_j, diff[j] in formulation. model is:

min_{x, d} \sum_{j=1}^m d_j s.t.       d_j >= p[j] - \sum_{i=1}^n x[i]x_{ij} \forall j            d_j >= \sum_{i=1}^n x[i]x_{ij} - p[j] \forall j            \sum_{j=1}^m x_ij = 1 \forall            x_{ij}\in \{0, 1\} 

this mixed integer optimization model, can solved, instance, using lpsolve or lpsolveapi packages in r or intlinprog function in matlab.


Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

jquery - Keeping Kendo Datepicker in min/max range -