gpt4 book ai didi

c# - 用 Max(F(X)) 选择 X

转载 作者:行者123 更新时间:2023-12-04 15:52:38 26 4
gpt4 key购买 nike

我正在尝试为跳棋游戏编写一些人工智能。我想选择棋盘得分最高的着法。

需要这样的东西:

var bestMove = from m in validMoves
where BoardScore(opp, board.Clone().ApplyMove(m)) is max
select m

除了我无法弄清楚“is max”部分。希望它返回单个项目而不是可枚举的。


基本上,相当于:

Move bestMove = null;
float highestScore = float.MinValue;
foreach (var move in validMoves)
{
float score = BoardScore(opp, board.Clone().ApplyMove(move));
if (score > highestScore)
{
highestScore = score;
bestMove = move;
}
}

最佳答案

你不是已经基本上已经弄清楚了吗?如果您编写自己的扩展方法,则可以以典型的 LINQ 方式实现此功能:

public static T MaxFrom<T, TValue>(this IEnumerable<T> source, Func<T, TValue> selector, IComparer<TValue> comparer)
{
T itemWithMax = default(T);
TValue max = default(TValue);

using (var e = source.GetEnumerator())
{
if (e.MoveNext())
{
itemWithMax = e.Current;
max = selector(itemWithMax);
}

while (e.MoveNext())
{
T item = e.Current;
TValue value = selector(item);
if (comparer.Compare(value, max) > 0)
{
itemWithMax = item;
max = value;
}
}
}

return itemWithMax;
}

public static T MaxFrom<T, TValue>(this IEnumerable<T> source, Func<T, TValue> selector)
{
return source.MaxFrom(selector, Comparer<TValue>.Default);
}

这样你就可以这样做:

var bestMove = validMoves
.MaxFrom(m => BoardScore(opp, board.Clone().ApplyMove(m)));

关于c# - 用 Max(F(X)) 选择 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3640905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com