2017-05-10 17 views
0

私はゲームのような小さなアプリケーションを開発していますが、私は以前これを行いましたが、それが正しい方法であるかどうかまだ分かりません。私が必要とするのは、10%の確率で勝利した後にアイテムを獲得するなど、いくつかのイベントが発生する確率です。プログラム的な方法でイベントのパーセンタイルチャンスを効率的に処理する方法

数字が< = 10の場合、サーバー側で乱数ジェネレータを使用していますが、ユーザーは報酬を得ることができますが、全ユーザー環境で10%の基準を満たしていません。

私は、サーバー側でユーザーのターン番号を記録し、毎回アイテムに報酬を与えることを考えていましたが、正しい方法であるかどうかはわかりません。私はあなたのアイデアや提案を知りたいと思います。また、stackoverflowがスタックエクスチェンジグループのこのコミュニティや他のコミュニティを投稿するのに適しているかどうかはわかりませんでした。もしそうなら、私をコメントの中で案内してください。私は適切なコミュニティに質問を移します。ありがとう。

答えて

4

質問に2つの全く異なることがあります。あなたは、与えられたアルゴリズムが両方を行うことができないので、あなたが望むものを決める必要があります。

  1. 試してみるたびに、10%の可能性があります。 2回連続してヒットした場合、200回試してもヒットしないことがあります。しかし、長期的には、それは時間の10%を打つ。

  2. 10回の試行のうち1回だけ試してみると、それは正確に1回、それ以上決して少なくないことを保証します。

上記の最初のものは、適切な乱数のピックと比較でうまくいきます。しかし、あなたは予想以上にヒット数が多く、予想よりもヒット数が少なくなります。時間が経つと平均ヒット数は10%になります。

function getRandomTenPercentOutcome() { 
    return Math.random() < 0.1; 
} 

第2のものは、ランダムジェネレータと最近のイベントの追跡を組み合わせた複雑な実装が必要です。保証された10分の1ヒットを実現する最も簡単な方法は、サーバーに0が埋め込まれたセルを作成させ、次に1つのセルをランダムに選択して1に変更することです。

次に、ランダム結果、あなたは.shift()配列の最初の項目をオフにして、その値を使用します。配列が空になると、新しいものを作成します。これにより、正確に1/10の結果(最初から開始)が強制的に適用されます。指定された10の結果は、新しい配列の作成の境界を越えても2または0になる可能性がありますが、これ以上のことはできません。

アレイをシステム全体(すべてのユーザーに対して1つのアレイ)またはユーザーごとに(各ユーザーには独自の結果アレイがあります)作成できます。各ユーザーが個人的に1/10に非常に近いと知りたい場合は、ユーザーごとに個別の結果配列を作成する必要があります。

アレイの長さを調整して、どれだけの分散を許容するかを制御することができます。たとえば、配列50を長く作成し、配列内の5つのセルをランダムに選択することができます。それはしかし、まだ両方の方法は、長期的に10%を平均化する50


内5本のヒットを強制する、50内のより多くの可変性を可能にするであろう。 1つ目は任意の間隔で10%より大きな偏差があるかもしれませんが、はるかにランダムです。 2つ目は10%からずっと小さな偏差がありますが、ランダムではないと言う人もいます(必ずしも悪いわけではありません - あなたの目的によります)。どちらも「公正」です。

私は息子のゲームから、そのストリークが一連のランダムな出来事からの時折予想される結果内にあるにもかかわらず、起こりそうもない出来事が起こったときに「不公平」と感じることを知っています。だから、本当に無作為の時折散発的な性質のために、時には本当にランダムなものが参加者にとって公平でないように見えるかもしれません。

+0

本当に配列の方法が好き、良い考えがそこにあった。 –

3

この質問は、他のstackoverflowページで複数の言語が要求されているようです。例えば

ここでは、Javaのためである:Java: do something x percent of the time

はいくつかのアイデアのためのリンクをチェックし、それが最終的に大規模なサンプル与えられた時間の10%になる傾向がある、あなたはすぐに10%を期待傾けることを覚えておいてくださいちょうど2つの呼び出し。

私は毎回毎回アイテムに報酬を与えることに同意します。行く方法ではありません。

+0

これは正解です。 10%は平均値であり保証値ではありません。 – DeepS1X

+0

各ユーザーの10%を計算して100人のユーザーを考慮すると、チャンスが低下する可能性があるので、ここで間違っていますか? –

+0

100人のユーザーがいる場合は、賞品を確認する回数を増やすだけですが、引き続き10%のチャンスがあります。リアルタイムの例が明確になることを考慮すると、例えば、ある人物がコインをひっくり返してその頭、その50%の確率で勝利した場合、100人の人がいれば、コインをひっくり返して頭を上げれば、それぞれ50%の確率で勝ちますが、唯一の違いは、コインが転倒していることです。さらに多くの賞が授与されていますが、勝つ確率は50%です各 – brakon

関連する問題