0

したがって、基本的なコードは次のとおりです。

    namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        protected Random random;

        public Form1()
        {
            InitializeComponent();
            random = new Random();
        }

        private void Form1_Load(object sender, EventArgs e)
        { }

        private void button1_Click(object sender, EventArgs e)
        {
            bool button1Clicked = true;
            if (button1Clicked == true) { ITIpanel.Visible = true; }
        }

        private void ITIpanel_Paint(object sender, PaintEventArgs e)
        {
            ITItimer.Enabled = true;
        }

        private void ITItimer_Tick(object sender, EventArgs e)
        {
            double rand = random.NextDouble();
            if (rand < .50d) { bluestimPanel.Visible = true; }
            else if (rand > .5d) { redstimPanel.Visible = true; }

            ITItimer.Enabled = false;
        }

        private void bluestimPanel_Paint(object sender, PaintEventArgs e)
        {
            Trialtimer.Enabled = true;
        }

        private void redstimPanel_Paint(object sender, PaintEventArgs e)
        {
            Trialtimer.Enabled = true;
        }

        private void Trialtimer_Tick(object sender, EventArgs e)
        {
            bluestimPanel.Visible = false;
            redstimPanel.Visible = false;
            Trialtimer.Enabled = false;
            ITIpanel.Visible = true;
        }
    }
}

ご覧のとおり、プログラム自体はかなり単純です。ITItimerのティックで、赤または青のパネルがランダムに発生します。ITItimerが合計10回ティックした場合、赤と青のパネルがそれぞれ5回発生するようにこれを変更したいと思います。

私はこれを1週間ほど研究してきましたが、まだ解決策を見つけていません。これを最もよく達成する方法について何かアイデアはありますか?

私は実際に次のものを動作させました:

double rand = random.NextDouble();
if (rand < .50d && blue < 5) { bluestimPanel.Visible = true; }
else if (blue == 5) { redstimPanel.Visible = true; }
if (rand > .5d && red < 5) { redstimPanel.Visible = true; }
else if (red == 5) { bluestimPanel.Visible = true; }
if (red >= 5 && blue >= 5) { panel1.Visible = true; } 

それは世界で最も美しいものではありません。しかし、それは仕事を成し遂げます。

4

1 に答える 1

2

ほとんどの通常のライブラリルーチンを使用する乱数は、疑似ランダム性の低品質のソースです。これがランダム化された科学的研究のためのものである場合、これはあなたのプロトコル設計の欠陥になります。

私がお勧めするアプローチは、これを、X回の試行タイプがある少なくともN回の試行のセッションをランダムに配置する方法と見なすことです。

以下は、概念を説明するための擬似コードです。

Let MinimumTrials be N MOD X + X
Let SessionList be a List<Trial>
For Each TrialType 
    add X instances of that trial type to SessionList
Shuffle(SessionList)

次に、セッションエンジンは、SessionListをウォークスルーするときに個々のトライアルを呼び出して、可能なトライアルオーダーを均等に分散させることができます。シャッフルは正しく行うためにある程度の精巧さを必要とする操作であることに注意してください。SOで検索することはそのための良い出発点です。

于 2012-05-14T23:02:54.473 に答える