gpt4 book ai didi

python - 播种和重用 Python 随机种子

转载 作者:太空狗 更新时间:2023-10-29 21:04:01 26 4
gpt4 key购买 nike

我正在使用 Python 和 Flask 来显示随机游戏板,并试图让人们通过使用种子返回到同一游戏。

但是,无论我使用随机种子,还是指定种子,我似乎都得到了相同的伪随机序列。

我删除了我的大部分代码(我用 numpy 做了很多拆分和连接)但即使是下面的简单代码也显示了错误:无论我给表单的种子值是多少,提交时显示的数字是相同。在未指定种子的情况下提交表单会显示不同的数字,但尽管在重新加载时显示不同的种子值,但其他数字也始终相同。

我做种有问题吗?

from flask import Flask, request, render_template
import numpy as np
import random

app = Flask(__name__)

@app.route( '/' )
def single_page():
return render_template( 'page.html', title = 'empty form' )

@app.route( '/number', methods = [ 'POST', 'GET' ] )
def render_page( title = 'generated random number', error = [] ):
error = []
if request.method == 'POST':
if request.form['seed'].isdigit():
seed = int( request.form['seed'] )
error.append( "seed set: " + str( seed ) + "." )
np.random.seed( seed/100000 )
else:
seed = int( 100000 * random.random() )
error.append( "seed not set, " + str( seed ) + " instead." )
np.random.seed( seed/100000 )

n = np.random.random() * 100;

return render_template('page.html', title=title, error=error, n=n, seed=seed )

else:
return render_template( 'page.html', title = 'empty form' )

if __name__ == '__main__':
app.debug = True
app.run()

这是 flask HTML 模板

<!doctype html>
<html>
<head><title>{{title}}</title>
</head>
<body>
{% if error != '' %}
{% for message in error %}
<h2>{{message}}</h2>
{% endfor %}
{% endif %}

{% if n %}
<h2>Random number is {{n}}</h2>

<h6>seed = {{ seed }}</h6>
{% else %}
<div id="form">
<form id="the_form" method="POST" action="number">
Seed: <input type="number" min="1" max="99999" id="seed" name="seed"><br>
<button id="submit" type="submit">Submit</button>
</form>
{% endif %}
</div>
</body>
</html>

我将种子乘以和除以 100,000,以便给出更容易记住的值(例如,4231 而不是 4.231479094...)。有没有更好的方法来获得可用的整数种子值?

更新:是的,有一种更好的方法来处理整数种子值——根本不会混淆除法。目前这就是我正在做的:

import numpy as np
import random
.
.
.
if request.form['seed'].isdigit():
seed = int( request.form['seed'] )
error.append( "seed set: " + str( seed ) + "." )
random.seed( seed )
else:
seed = int( 100000 * np.random.random() )
error.append( "seed not set, " + str( seed ) + " instead." )
random.seed( seed )

n = random.random() * 100;

return render_template('page.html', title=title, error=error, n=n, seed=seed )

这很好用。 np.random.seed() 似乎并不总是得到相同的序列,但 random.seed() 不介意整数,所以我使用后者。

最佳答案

你的种子可能是一个整数,在早期的 Python 中整数除法不会给出 float 。因此

7078 / 100000 = 0

如果种子 < 100000,这总是给出零种子。有了这个:

np.random.seed( seed )

种子应该改变。如果没有参数,np.random.seed 应该尝试获取(系统相关的)种子。

如果您想阅读“修复”该部门的 PIP:请参阅 PEP 238 .在 Python 3 中,这个 2/5=0.4 在 Python 2.X 中 2/5=0。您可以通过包含以下行来强制在代码顶部进行浮点向上转换:

from __future__ import division

为什么使用 np.random 而不是 Python 的 random

来自documentation :

The Python stdlib module “random” also contains a Mersenne Twister pseudo-random number generator with a number of methods that are similar to the ones available in RandomState. RandomState, besides being NumPy-aware, has the advantage that it provides a much larger number of probability distributions to choose from.

关于python - 播种和重用 Python 随机种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9534552/

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