前提・実現したいこと
x=乱数として、
配列上の確率に応じたaの行動に対してbの行動をする。そのbの行動を新しいaとして格納し、bの行動をする。というのを繰り返したいです。
配列上の24列25列の確率が発生した時に、そのループを抜け出したいです。
プログラミング初心者です。お手柔らかにお願いします。
発生している問題・エラーメッセージ
1、確率を記載した25行25列多次元配列をコード上に載せる
2、配列からデータを取り入れる
3、確率に応じた行動(0〜23列に記載の確率ではループ、24、25列に記載の確率ではループを抜けだす)を行わせる
該当のソースコード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int tpm[22][24] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0.5, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.7, 0, 0, 0.05, 0.25, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0.1, 0.2, 0.3, 0.1, 0, 0, 0, 0, 0, 0.1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.25, 0, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6, 0.3, 0, 0, 0, 0, 0.1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0, 0, 0, 0, 0.2, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.3, 0, 0, 0, 0.2},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0.6, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0.3, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.05, 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.3, 0.2},
{0, 0, 0.4, 0, 0.2, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0},
{0, 0, 0, 0, 0.2, 0, 0.2, 0, 0.2, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2},
{0, 0, 0, 0, 0, 0, 0.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, 0.3},
{0, 0, 0, 0, 0, 0.1, 0, 0.3, 0, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0},
{0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0.1, 0.3, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0.2},
{0, 0, 0.1, 0.1, 0, 0, 0, 0.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0},
{0, 0, 0.3, 0.1, 0.1, 0.1, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2},
{0, 0, 0.3, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1}};
int main {
for(i=0;i<2;i++) { x = (double)rand()/RAND_MAX; Ma = 0; Mb = 0; for (j = 1; (x <= Ma) || (Mb < x); j++) { Ma = Mb; Mb = ; /*ここに新しいbの行動*/
補足情報(FW/ツールのバージョンなど)
行列を記載したいのですが、その場合は2次元配列でよろしいのでしょうか?
また、0〜23列の確率ではaに対してbの行動をとり、そのbを新たなaとして格納するという考えです。24、25列では、ループを抜け出すということです。
説明が下手ですみません。行動という表現には語弊がありました。
確率をPとすると
行に記載されている確率は0 <= P <= 1で、同じ行を全て足すと1になるとします。
a(0行X列)の確率を実行すると、次は、b(X行Y列)とします。
0行X列の次はX行Y列、その次はY行Z列、その次は…というように確率で繰り返していき、24、25列の確率を引き当てるまでループするという考えです。
遅くなってしまい申し訳ありません。
スタートは0行or1行、12or13行とします。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー