mpi - Resolve this function without recursion in order to use parallelism -
i'm trying optimize process calculate possible combinations of players form partitions. understand problem, use following example.
for exampe have set of players n = {1,2,3,4,5}
, players regrouped {1,2},{3,4},{5}
. means player 1 play player 2 single player, , one. each group of players has set of strategies or choices. each player chooses group wants belong, example: group {1,2}
has these possibilities {{1,2};{1,2,3,4}}
; i.e players {1,2}
either choose stay or join group {3,4}
. same explanation rest of players:
{3,4}=>{{3,4};{3,4,5};{1,2,3,4}} {5}=>{{5};{3,4,5}}
now, group of players choosing same strategy form new group (coalition). example, group {1,2}
chose strategy {1,2,3,4}
i.e. players {1,2}
want form new group players {3,4}
. players {3,4}
choose strategy {3,4,5}
, player {5}
choose strategy {3,4,5}
. players choose same strategy grouped form final partition of players this: {1,2},{3,4,5}
; players {3,4,5}
have chosen same strategy, grouped together, players {1,2}
chose different strategy stay alone. have programmed process recursive function admissible partitions of players. problem here: function generate possible partitions , admissibles takes lot of time.
now question if possible resolve problem without using recursive function; i.e. in sequential form in order use parallelism jcuda, when have many players , many partitions. ideal solution here, mpi or jcuda?
import java.util.arraylist; import java.util.hashtable; public class partitions { public hashtable<arraylist<integer>, arraylist<arraylist<integer>>> hashtab = new hashtable<arraylist<integer>,arraylist<arraylist<integer>>>(); // key chosen strategy(coalition) , value group of players have chosen same coalition(strategy). // create partitions combination public void calculstrategiescombination (int index, arraylist<objectscoalitions> playercoalitions, int k,int l) { index = index +1; if(index < playercoalitions.size()) { for(int j =0; j< playercoalitions.get(index).coaltions.size(); j++) { if(!this.hashtab.containskey(playercoalitions.get(index).coaltions.get(j))) { arraylist<arraylist<integer>> e = new arraylist<arraylist<integer>>(); e.add(playercoalitions.get(index).objects); this.hashtab.put(playercoalitions.get(index).coaltions.get(j), e); } else { this.hashtab.get(playercoalitions.get(index).coaltions.get(j)).add(playercoalitions.get(index).objects); } if(this.hashtab.size()<k) { calculstrategiescombination (index, playercoalitions,k,l); } if(this.hashtab.get(playercoalitions.get(index).coaltions.get(j)).size()==1) { this.hashtab.remove(playercoalitions.get(index).coaltions.get(j)); } else { this.hashtab.get(playercoalitions.get(index).coaltions.get(j)).remove(this.hashtab.get(playercoalitions.get(index).coaltions.get(j)).size()-1); } } } else { // treatment....... } } } public class objectscoalitions { public arraylist<integer>objects = new arraylist<integer>(); // example objects = {1,2} public arraylist<arraylist<integer>> coaltions = new arraylist<arraylist<integer>> (); // coalitions (strategis)={{1,2};{1,2,3,4}} }
Comments
Post a Comment