C/C++の宿題を片付け ..
[2ch|▼Menu]
554:デフォルトの名無しさん
07/11/15 20:10:23
>>547

実際はね、重きじゃなくて入力データなんです。
入力データ(配列でいうとdata[50][5])が移動間を動く感じなんですけど
各状態にデータがあって、その入力データを各状態のデータによって
計算して出された値を各移動確率とかけるというわけなんですけど。
で書いてくださったプログラムにおいて、
for(cnt=0;cnt<50;cnt++){それを50回
 for(i=0;i<7;i++)cal_next_gs(list[i]);は7つの状態間で1回の移動につき確率計算
}
ってのはわかるんです。1次元配列として引数として渡せば
できるのかなーと今思いました。
for(cnt=0;cnt<50;cnt++){それを50回
 for(i=0;i<7;i++)cal_next_gs(list[i],data[cnt]);は7つの状態間で1回の移動につき確率計算
}

void cal_next_gs(struct gstate *gs,float data[5])
{
//計算して移動確率を計算
}
でいけそうな感じがします。

555:デフォルトの名無しさん
07/11/15 21:27:17
>>527
ありがとうございました。

556:デフォルトの名無しさん
07/11/15 21:38:48
>>554
何をいいたいのか、いまいち分からないんだが、
どんな入力に対してどんな出力が欲しいの?

電気回路上の電流のシミュレーション?

557:デフォルトの名無しさん
07/11/15 21:58:18
入力に対して隠れマルコフモデル(HMM)を使って確率を出すんですけど、
この例では3状態のHMMと2状態のHMMを使って最終的にendにたどりつくとこの
状態の確率が出力値となるんです。
で1つの移動に対して入力1フレームを正規分布によって評価し確率を出す。
その正規分布をHMMで評価するんです。
そのHMMには平均分散、移動確率とあるんですけど、
平均分散を正規分布で用いて確率をだして、移動確率をかけて
最終的な移動の確率となるんです。

前につくってもらったのが移動確率でのみの計算でした



558:デフォルトの名無しさん
07/11/15 22:01:52
神経衰弱を行うゲームを作成すること。
ただし、カードは52枚全て使用し、絵柄の
区別は無いものとする。

このプログラムをお願いします。(^_^)

559:デフォルトの名無しさん
07/11/15 22:02:55
すみません、どなたか>>489をお願いします。
自分でもあつかましいと承知しているのですが、
どうにも分からないので・・・。
コンパイラ名はVS2005のようです。
よろしくお願いします。

560:デフォルトの名無しさん
07/11/15 22:12:59
557ですけど
頼んだのは移動してくる確率が2つだったらグリッドで計算できたんですけど
3つの場合どうすればいいのかわからなくて。
しかも下のやつも計算しなくてはならなくて。
なので質問させていただきました

561:デフォルトの名無しさん
07/11/15 22:30:13
>>543
>この(startから状態1への移動確率)X(重き)と
>(状態1の状態確率)X(状態1から状態1への移動確率)X(重き)と、(状態11の状態確率)X(状態11
>から状態1への移動確率)X(重き)の和が状態1の状態確率となります。
状態1ってループしてるけど単純にこれでいいの?
(状態1の状態確率)X(状態1から状態1への移動確率)X(状態1から状態1への移動確率)X(重き)
...
とかは考えなくてもよし?

562:デフォルトの名無しさん
07/11/15 22:36:35
>>543
>>246 の問題だと矢印にくっつく数値(状態遷移確率)が固定だったのを
時間(移動回数)によって矢印にくっつく数値(状態遷移確率)を変化させたいと言う事でいい?

563:デフォルトの名無しさん
07/11/15 22:40:42
>>561
考えなくていいです。
>>562
そうです。
実際は入力に対して各HMMの1つの状態の平均分散から
正規分布により出力確率を出してそのHMMから移動確率を出して
確率X移動確率なんですけど
簡単のために、出力確率を重きとしてるわけです。

564:デフォルトの名無しさん
07/11/15 22:43:05
移動確率を出す関数だけ。

enum states { START, FIRST, SECON, THIRD, TENTH, ELEVE, E_N_D };
enum states movProbMap( enum states from, enum states to )
{
return from == START ? (to == FIRST ? 0.5 : to == TENTH ? 0.5 : 0.0) :
from == FIRST ? (to == FIRST ? 0.6 : to == SECON ? 0.3 : to == ELEVE ? 0.1 : 0.0) :
from == SECON ? (to == SECON ? 0.7 : to == THIRD ? 0.3 : 0.0) :
from == THIRD ? (to == THIRD ? 0.8 : to == E_N_D ? 0.2 : 0.0) :
from == TENTH ? (to == TENTH ? 0.6 : to == ELEVE ? 0.4 : 0.0) :
from == ELEVE ? (to == ELEVE ? 0.7 : to == FIRST ? 0.2 : to == E_N_D ? 0.1 : 0.0) :
0.0;
}


565:デフォルトの名無しさん
07/11/15 22:44:10
激しく無意味だな。スマン無視してくれ。


566:デフォルトの名無しさん
07/11/15 22:47:07
>>564
これは一体何でしょう?
実数を返したいんじゃないの???

567:デフォルトの名無しさん
07/11/15 22:55:57
enum states -> double
で。

568:デフォルトの名無しさん
07/11/15 23:10:49
>>543
使い方は data.txt をリダイレクトするだけ
lzh 内のファイル名間違えたけど気にしない
ans478 < data.txt
URLリンク(kansai2channeler.hp.infoseek.co.jp)

569:デフォルトの名無しさん
07/11/15 23:32:51
>>568
ありがたいんですけど
これちょっと使いかたわからなくて。
gcc ans478.cして実行のときになにか入力しないといけないんですか?

570:デフォルトの名無しさん
07/11/15 23:35:27
本来なら
ans478
と打って実行するところを
ans478 < data.txt
のようにしてdata.txtを標準入力にリダイレクト

571:デフォルトの名無しさん
07/11/15 23:36:42
>>489
#include<stdio.h>

int main(void){
int i, num, max=0;

for(i=20071114;i<=20071114+6-1;i++){
scanf("%d", &num);
if(num>max) max=num;
}
printf("%d\n", max);

return 0;
}

572:デフォルトの名無しさん
07/11/15 23:39:49
>>570
できました。。。
さっきできなかったのに。
ありがとうございます。

自分で作りなおしてから
できなかったらこれも試してみます


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4717日前に更新/222 KB
担当:undef