Algorithm 使用一些算法找到最好的团队

Algorithm 使用一些算法找到最好的团队,algorithm,math,combinations,Algorithm,Math,Combinations,对于一支7人制足球队,我有21名球员有他们的“位置和等级”。我想通过编程找到最好的团队。是否有任何算法或数学公式可以用来根据球员的评分来找到“最佳”球队。 然后找到“二等”最佳团队,依此类推。我对3-3-1的阵型很满意(3前锋,3防守,1 GK) 我这里有21名球员 Player Position Rating Vin F 2.75 Max D 3.5 Jack F 4.25 Doen D

对于一支7人制足球队,我有21名球员有他们的“位置和等级”。我想通过编程找到最好的团队。是否有任何算法或数学公式可以用来根据球员的评分来找到“最佳”球队。 然后找到“二等”最佳团队,依此类推。我对3-3-1的阵型很满意(3前锋,3防守,1 GK)

我这里有21名球员

Player  Position   Rating

Vin      F          2.75
Max      D          3.5
Jack     F          4.25
Doen     D          3.75
Ter      F          2.85
Min      GK         3.55
Mor      F          4.25
TOY      D          3.85
Jut      D          2.25
Per      F          4.75
Tod      F          4.58    
GER      D          4.65
YAH      D          4.36
KET      F          3.95
FEL      D          2.82
MET      GK         3.56
Jee      F          2.99
LO       D          3.36
UT       F          3.88
GGT      D          4.15
UUT      GK         4.25

我不知道您将使用什么编程语言,或者如何处理数据,但下面是我的快速解决方案

顺便说一句,我选择了Javascript,因为它很容易制作一个演示

函数getPos(pos){
返回功能(播放器){
返回玩家['Position']==pos;
}
}
功能选择班(el,t){
让团队=[],
arr=t.slice(),
i=0;
而(arr.length>=7){
设剩余=[],
selectedSquad=[];
Object.keys(el.forEach)(函数(k,v){
让playersInPositions=arr.filter(getPos(k)),
selected=playersInPositions.sort(函数比较(a,b){
设y=a.额定值,z=b.额定值;
返回z-y;
}).拼接(0,el[k]);
剩余。推(播放位置);
selectedSquad.push(已选择);
});
arr=[].concat.apply([],剩余);
teams[i]=selectedSquad.slice();
i++;
}
返回队;
}
让团队=[
{“玩家”:“Vin”,“位置”:“F”,“等级”:2.75},
{“玩家”:“最大”,“位置”:“D”,“等级”:3.5},
{“玩家”:“杰克”,“位置”:“F”,“等级”:4.25},
{“玩家”:“多恩”,“位置”:“D”,“等级”:3.75},
{“玩家”:“三”,“位置”:“F”,“等级”:2.85},
{“球员”:“分钟”,“位置”:“GK”,“等级”:3.55},
{“玩家”:“Mor”,“位置”:“F”,“等级”:4.25},
{“玩家”:“玩具”,“位置”:“D”,“等级”:3.85},
{“球员”:“突出”,“位置”:“D”,“等级”:2.25},
{“玩家”:“Per”,“位置”:“F”,“等级”:4.75},
{“玩家”:“托德”,“位置”:“F”,“等级”:4.58},
{“玩家”:“GER”,“位置”:“D”,“等级”:4.65},
{“玩家”:“耶”,“位置”:“D”,“等级”:4.36},
{“玩家”:“基特”,“位置”:“F”,“等级”:3.95},
{“玩家”:“自由”,“位置”:“D”,“等级”:2.82},
{“玩家”:“大都会”,“位置”:“GK”,“等级”:3.56},
{“玩家”:“Jee”,“位置”:“F”,“等级”:2.99},
{“玩家”:“LO”,“位置”:“D”,“等级”:3.36},
{“玩家”:“UT”,“位置”:“F”,“等级”:3.88},
{“玩家”:“GGT”,“位置”:“D”,“等级”:4.15},
{“玩家”:“UUT”,“位置”:“GK”,“等级”:4.25}
]
let formation={
“GK”:1,
“D”:3,
“F”:3
}
//选队(队形、队伍);

控制台日志(选择小队(编队,小队))我不知道您将使用什么编程语言,或者如何处理数据,但下面是我的快速解决方案

顺便说一句,我选择了Javascript,因为它很容易制作一个演示

函数getPos(pos){
返回功能(播放器){
返回玩家['Position']==pos;
}
}
功能选择班(el,t){
让团队=[],
arr=t.slice(),
i=0;
而(arr.length>=7){
设剩余=[],
selectedSquad=[];
Object.keys(el.forEach)(函数(k,v){
让playersInPositions=arr.filter(getPos(k)),
selected=playersInPositions.sort(函数比较(a,b){
设y=a.额定值,z=b.额定值;
返回z-y;
}).拼接(0,el[k]);
剩余。推(播放位置);
selectedSquad.push(已选择);
});
arr=[].concat.apply([],剩余);
teams[i]=selectedSquad.slice();
i++;
}
返回队;
}
让团队=[
{“玩家”:“Vin”,“位置”:“F”,“等级”:2.75},
{“玩家”:“最大”,“位置”:“D”,“等级”:3.5},
{“玩家”:“杰克”,“位置”:“F”,“等级”:4.25},
{“玩家”:“多恩”,“位置”:“D”,“等级”:3.75},
{“玩家”:“三”,“位置”:“F”,“等级”:2.85},
{“球员”:“分钟”,“位置”:“GK”,“等级”:3.55},
{“玩家”:“Mor”,“位置”:“F”,“等级”:4.25},
{“玩家”:“玩具”,“位置”:“D”,“等级”:3.85},
{“球员”:“突出”,“位置”:“D”,“等级”:2.25},
{“玩家”:“Per”,“位置”:“F”,“等级”:4.75},
{“玩家”:“托德”,“位置”:“F”,“等级”:4.58},
{“玩家”:“GER”,“位置”:“D”,“等级”:4.65},
{“玩家”:“耶”,“位置”:“D”,“等级”:4.36},
{“玩家”:“基特”,“位置”:“F”,“等级”:3.95},
{“玩家”:“自由”,“位置”:“D”,“等级”:2.82},
{“玩家”:“大都会”,“位置”:“GK”,“等级”:3.56},
{“玩家”:“Jee”,“位置”:“F”,“等级”:2.99},
{“玩家”:“LO”,“位置”:“D”,“等级”:3.36},
{“玩家”:“UT”,“位置”:“F”,“等级”:3.88},
{“玩家”:“GGT”,“位置”:“D”,“等级”:4.15},
{“玩家”:“UUT”,“位置”:“GK”,“等级”:4.25}
]
let formation={
“GK”:1,
“D”:3,
“F”:3
}
//选队(队形、队伍);

控制台日志(选择小队(编队,小队))你将如何使用笔和纸来完成它?这是一个非常简单的算法…欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。在这里申请。StackOverflow不是一种设计、编码、研究或辅导服务。您没有用定量的术语解释“最佳”的含义,也没有自己做出任何明显的尝试来解决这个问题。您正在寻找的一个东西叫做“目标函数”这是一个数学公式,你试图最大限度地描述“最佳”团队。例如,对于前锋-三名前锋的评分均为4.0(总计12.0)是否绝对等同于两名前锋的评分为2.0,一名前锋的评分为8.0(总计12.0)?还是因为有一个“超级明星”而比三个相等更好?还是因为有两个不太好的家伙而更糟糕?一旦你明白了这一点,在3个前锋、3个防守和1个GK中最大限度地发挥它应该是很容易的。@BobGilmore感谢你的投入,会尝试这样做的。将会有更多的球员加入这个名单