概要 擬似乱数はコンピュータ ソフトウェアの設計で広く使用されています。この記事では、擬似乱数生成の一般原則と、ASP.NET Framework で提供される Random クラスとそのメソッドを使用して、さまざまな要件を満たすさまざまな範囲の乱数を生成する方法を紹介します。最後に、Web コントロール フォームと組み合わせて、ソフトウェア設計における ASP.NET の乱数の応用について説明します。
キーワード ASP.NET、擬似乱数生成、Web、乱数に似た
乱数は、ソフトウェア設計、特に実際の環境シミュレーションおよびテストの分野で広く使用されています。真にランダムなシーケンスを追求するために、人々は多くの原始的な物理的手法を使用して、一定の範囲内の精度 (ビット数) を満たす均一に分散されたシーケンスを生成してきました。その欠点は、速度が遅く、効率が低く、大量のストレージを必要とすることです。スペース、再出現など。コンピュータ シミュレーション研究のニーズを満たすために、さまざまな確率分布をシミュレートする擬似ランダム シーケンスを生成するアルゴリズムの使用に関する研究が注目されています。擬似乱数とは、数学の漸化式によって生成される乱数を指します。実用的な観点から見ると、そのような数値を取得する最も簡単かつ自然な方法は、コンピューター言語ライブラリによって提供される乱数発生器を使用することです。開発環境が異なれば、乱数を生成するための関数や方法も異なります。通常、値が 0 と 1 の間で均一に分布する疑似乱数変数を出力します。
乱数ジェネレーターは、
コンピューターで乱数を生成する方法であり、多くの場合、次の式が使用されます。
この公式を使用して 0 から 65536 までの一連の乱数 a1、a2、... を生成するプログラムは、232 ステップ乗算調和乱数発生器と呼ばれます。このうち、b、c、d は正の整数で、d は式で生成される乱数列のシードと呼ばれます。
この式から、パラメータ b、c、d が決定されると、生成されるランダム シーケンスも決定されることがわかります。この、ある程度のランダム性だけを満たした数列を擬似乱数と呼びます。
以下は乱数発生器の例です。このうち、random_seed 関数を使用すると、仮パラメータ d=0 の場合、システムの現在時刻が乱数シードとして使用され、d が乱数シードとして選択されます。シード; 関数 rand は、指定されたシードに基づいて、新しいシードを計算し、低〜高の範囲で新しい乱数を生成します。
#define 乗数 0x015A4E35L
#define INCREMENT 1
void random_seed(unsigned long d){
if (d==0)シード = 時間(0);
それ以外の場合はシード = d;}
unsigned int random(unsigned long low、unsigned long high)
{
シード = 乗数 * シード + インクリメント;
return ((シード>>16)% (高-低) + 低);
}
ASP.NET の擬似乱数生成メカニズムにより、
コンピューター
が完全な乱数を生成することは不可能になります。いわゆる乱数発生器は、特定のアルゴリズムを使用して、事前に選択されたランダム シードに対して複雑な演算を実行し、生成された結果を使用して完全な乱数をほぼシミュレートします。この種の乱数は、擬似乱数と呼ばれます。擬似乱数は、有限の数値セットから等しい確率で選択されます。選択された数値は完全にランダムではありませんが、実用的な目的には十分なランダムです。
1. VB.NET の組み込み関数
ASP.NET プログラムでは、さまざまなプログラミング言語を使用できます。デフォルトのプログラミング言語は VB.NET です。VB.NET と VB は似ていますが、アプリケーション環境と記述方法が異なります。コードも違います。 VB.NET では、数学関数を使用する場合は、.NET Framework によって提供される Math クラスを渡す必要があります。このクラスは、コードの先頭に Imports System を追加して使用できます。数学関数。
乱数の生成に使用される関数のプロトタイプは次のとおりです: Rnd(x) この関数は、0 から 1 までの単精度乱数を生成するために使用されます。 x は乱数を生成するためのシードです。 (最小、最大) の範囲から数値をランダムに選択する場合は、次の式を使用する必要があります: 乱数 = (最大 - 最小) * Rnd(x) + 最小。
擬似乱数の選択はランダム シードから始まります。毎回取得される擬似乱数が十分に「ランダム」であることを保証するためには、ランダム シードの選択が非常に重要です。選択したランダム シードが同じであれば、生成されるランダム シーケンスも同じになります。一般に、システム時間に関連するパラメータはランダム シードとして使用されます。これは、.net Framework の乱数ジェネレータで使用されるデフォルトの方法でもあります。
2. 乱数クラス System.Random
乱数クラス System.Random クラスは、表 1 に示すように、さまざまな要件を満たすさまざまな乱数を生成する次のメソッドを提供します。
表 1 System.Random クラスが提供するさまざまなメソッド
シリアルナンバー | メソッド名 | 機能説明 |
1 | 次() | 0 ~ 2147483647 の整数を返します。 |
2 | 次へ(i) | 0 から i までの整数を返します |
3 | 次へ(i,j) | i~j の間の整数を返します |
4 | Nextdouble() | 0 から 1 までのランダムな 10 進数を返します |
5 | Nextdouble(byte()) | バイト配列の各要素の値として、0 ~ 255 のランダムな整数を使用します。 |
乱数クラス System.Random を使用する場合は、最初に宣言する必要があります。 Nextbytes(byte()) メソッドを使用する場合は、使用する前にバイト配列も宣言する必要があります。
3. テスト プログラムの作成で
は、ASP.NET プログラムを実行する前に、Microsoft IIS の構成、.NET Framework SDK およびマシン MSE エディタのインストールなど、開発および実行環境を確立する必要があります。 MSE エディターは Microsoft Office のアドオン ソフトウェアで、ASP.NET の編集ツールとして非常に便利です。テストプログラムのコードは次のとおりです:
<script language="vb" runat="server">
sub page_load(send as object,e aseventargs)
dim r1 をランダム =newrandom() として
response.write("r1.next() の結果は次のとおりです:"+r1.next().tostring())
response.write("Theresultofr1.next(100) は:" +r1.next(100).tostring())
response.write("r1.next(100,150) の結果は次のとおりです:"+r1.next(100,150).tostring())
response.write("r1.nextdouble() の結果は次のとおりです:"+r1.nextdouble().tostring())
r1.nextbytes(r) // dim r(300) をバイトとして
response.write("r(100) は:")
応答.write(r(199))
end sub </script>
テスト結果を図 1 に示します。
図 1 擬似乱数テストの実行結果
開発アプリケーションの要件分析例
: サイコロ ゲームをシミュレートするアプリケーションを作成します。このゲームでは、プレイヤーはランダムにサイコロを振ります。各サイコロには 6 つの面があり、それぞれ 6 つの点 1、2、3、4、5、6 を表します。金型が停止したら、金型上面の数字を見てください。投球数が 6 の場合は勝利メッセージが表示され、それ以外の場合は投球が続行されます。
1. 主要なテクノロジ
1.1 Web コントロール フォーム
Web コントロール フォームは、高級言語のオブジェクト指向の特性を備えており、ASP.NET の System.Web.UI.WebControls 名前空間のオブジェクトです。処理プロセスは HTML コントロール フォームに似ていますが、次の特徴があります。フォームはサーバー側で実行され、入力フィールドはすべてコントロールであり、強力で豊富なプロパティとメソッドがあり、入力フィールドの情報は保持されます。入力フィールドを検証する機能があり、データ表示コントロールなどが含まれます。
典型的な Web コントロール フォーム コードは次のとおりです。
<asp: button id="sub3" text="confirm" runat="server"/>
このうち、ASP: XXX は、ID 属性が示す Web コントロールの種類を示します。コントロールの識別名。Runat 属性の値はサーバーであり、これがサーバー側で実行されるコントロールであることを示します。
この例で使用される Web コントロールは主にボタン コントロールです。 Image コントロールは画像ファイルを表示するために使用され、次の属性があります: Imageurl (画像ファイルの URL を示す)、Width (画像ファイル表示の幅)、Height (画像ファイル表示の高さなど)。
1.2 疑似乱数の生成
要件分析の記述によれば、ランダムにサイコロを振って得られる点をシミュレートするには、1から6までの整数をランダムに生成する必要があります。この場合、Next (i, j) メソッドが使用されます。 System.Random クラスの i=1、j=7 を使用できます。 (筆者がテストプログラムを作成したところ、j=6 の場合、生成される乱数は 1 ~ 5 であることがわかりました)
2. プログラムの実装
プログラムの主なコードは次のとおりです。
<script language="vb" runat="server ">
sub disp(obj as object,e asevenargs)
dim r1 as random =new random() //乱数クラスを定義します
dim file_prefix as string = "Imagesdie"
dim file_suffix as string = ".png"
value = r1.next(1,7) //整数としての dim 値
s1 = file_prefix + value.tostring() + file_suffix
pic1.imageurl = s1 //value = 6 の場合、
画像コントロールの imageurl 属性を更新します
disp.text = "あなたが勝ちます" / /プロンプト情報を表示
else
disp.text = "再試行"
end if
end sub
</script>
<form id="form1" runat="server"><br>
<asp:button id="disp" runat="server " onclick="disp" text="start"/>
<asp:image id="pic1" runat="server" width="50" height="50"/></form>
実行結果プログラムの内容を図 2 に示します。
図 2 プログラムの実行結果
結論
擬似乱数は、Web アプリケーションの多くの場所で使用されます。ランダム シーケンスを生成するためのシード パラメーターを選択する方法と、より良いパフォーマンスの擬似乱数シーケンスを生成するためにどのランダム アルゴリズムを使用するかは、コンピューター ソフトウェアによって決まります。開発者が追求した目標の1つ。 ASP.NET フレームワークが提供する擬似乱数生成クラスと、スクリプト言語 VB.NET が提供する関数メソッドを使用して、さまざまな要件を満たすさまざまなランダム シーケンスを生成できます。たとえば、Web システムの本人認証に使用されるランダム チェック コードには、乱数生成技術が使用されています。この Web サイトには多くの記事があるため、ここでは詳しく説明しません。