如何采取概率步骤
本文关键字:概率 何采取 | 更新日期: 2023-09-27 18:00:21
我正在设计一个递归搜索函数,在某些条件下,它将正常递归,而在其他条件下,必须以概率e^(e/Temperature)递归。除了递归步骤之外,所有的代码都完成了,因为我不知道如何根据一定的概率执行一些东西
Node Search(Node start)
{//first, calculate temperature. count will keep timestep
count++;
double temperature = 1000 * (Math.Pow(.995,count));//CALCULATES TEMP
for (int i = 0; i < start.state.Length; i++)
{
string temp = StateReturn(start.state, i);
if (temp.Length > 1 && temp != start.state
&&visited.Contains(temp) == false)
{
list.Add(new Node(start, temp));
visited.Add(temp);
}
}
//add all relevant nodes to list.
Random gen = new Random();
int rand = gen.Next(list.Count);//think this should work
//random number has been taken. now just to pull rand node from list
Node next = list.ElementAt(rand);
list.RemoveAt(rand);
double E = -(next.wrongNum - start.wrongNum); //we want less wrong
// if next has
if (E> 0)
{
//standard recursion
}
else //recurse with probability e^(E/t)
{
}
}
我正在设计一个递归搜索函数,在某些条件下,它将正常递归,而在其他条件下,必须以概率e^(e/Temperature)递归。除了递归步骤之外,所有的代码都完成了,因为我不知道如何根据一定的概率执行一些东西
让我们简化你的问题,使其更为笼统。
我正在设计一个函数,它将以概率
p
(其中0 <= p <= 1
)做一件事,以概率1 - p
做另一件事。我不知道如何使某件事按照一定的概率执行。
选择一个介于0和1之间的随机数。变量gen
中已经有一个Random
对象,所以只需调用
double result = gen.NextDouble(); // Produce a random double between zero and one.
现在你可以用它来做出选择:
if (result <= p)
DoSomething();
else
DoSomethingElse();
DoSomething()
以概率p
完成,而DoSomethingElse()
以概率1 - p
完成。
有道理吗?