gpt4 book ai didi

java - 根据他们的百分比调用不同的任务

转载 作者:行者123 更新时间:2023-11-30 09:36:57 25 4
gpt4 key购买 nike

Task1, X% 
Task2, Y%
Task3, Z%
----
TaskN, N%

And X + Y + Z + . . . + N = 100%

问题:- 上面的配置文件对不同的任务有某种权衡(执行 Task1 X% 的时间并在 Line1 上打印任何内容,执行 Task2 Y% Z% 的时间并在 Line2 上打印任何内容并执行 Task3 Z% 的时间并在 Line3 上打印任何内容等等。总重量加起来应为 100%。

我写的代码:- 我写了一个程序,我在其中逐行读取文件并将所有行存储在 String 的 ArrayList 中,然后我生成了 1 到 100 之间的一些随机数。例如,有三个任务-

Task1 75%
Task2 15%
Task3 10%

获取 1-100 之间的随机数。如果数字是 1-75 do Task1 表示在第 1 行打印任何内容,76-90 do Task2 表示在第 2 行打印任何内容,91-100 do Task3 表示在第 3 行打印任何内容。但是我如何为任何具有 N 任务和任意百分比的配置文件扩展它。我卡在这部分了。

                private static Random r = new Random();
private final static int Low = 1;
private final static int High = 100;
String sCurrentLine;
ArrayList<Integer> percentageCalls = new ArrayList<Integer>();

br = new BufferedReader(new FileReader("S:\\config.txt"));

int R = r.nextInt(High-Low) + Low;

ArrayList<List<String>> allLines = new ArrayList<List<String>>();
while ((sCurrentLine = br.readLine()) != null) {
allLines.add(Arrays.asList(sCurrentLine.split("\\s+")));
Collections.shuffle(allLines);
}

for (List<String> s1 : allLines) {
percentageCalls.add(Integer.parseInt(s1.get(0)));
}
Collections.sort(percentageCalls, Collections.reverseOrder());

最佳答案

我最近为一个您应该能够适应的项目写了一些东西。此类允许将任意数量的选择添加到“可能性”列表中。机会数量可以是任何整数...总数不需要加起来为 100。因此,如果您希望选择 A 在 302 次中发生 5 次,而选择 B 在另外 297 次中发生,那么您可以将 A 添加到概率为 5 和 B 概率为 297。这段代码有点粗糙,可能需要一些改进,但这个想法应该可以帮助您扩展到 N 个选择。您只需要编写一些循环遍历文件并将每种可能性添加到 ResultGenerator 的内容。

示例使用:

ResultGenerator<String> rgen = new ResultGenerator<String>();

rgen.AddPossibility("Red", 25);
rgen.AddPossibility("Blue", 20);
rgen.AddPossibility("Green", 30);
rgen.AddPossibility("Black", 5);
rgen.AddPossibility("White", 15);

String result = rgen.GetRandomResult();

类:

public class ResultGenerator<T> {

class Possibility
{
Possibility(T choice, int chance)
{
this.Choice = choice;
this.Chance = chance;
}

public T Choice;
public int Chance;
public int RangeMax;
public int RangeMin;

}

private Random r;

public ResultGenerator(Random r)
{
this.r = r;
}

public ResultGenerator()
{
this.r = new Random();
}

private List<Possibility> possibilities = new ArrayList<Possibility>();

public void AddPossibility(T choice, int chance) {
possibilities.add(new Possibility(choice, chance));
}

public T GetRandomResult() {

if (possibilities.size() == 0)
return null;

//Calculate ranges for possibilities
int totalChances = 0;
for (Possibility p : possibilities) {
p.RangeMin = totalChances;
p.RangeMax = totalChances + p.Chance;
totalChances += p.Chance;
}

int randomNumber = 1 + r.nextInt(totalChances + 1);

for(Possibility possibility : possibilities)
{
if (randomNumber <= possibility.RangeMax && randomNumber > possibility.RangeMin)
{
return possibility.Choice;
}
}

return null;
}

}

关于java - 根据他们的百分比调用不同的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610132/

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