質問するログイン新規登録

質問編集履歴

2

訂正

2018/10/02 17:45

投稿

rosbergf1
rosbergf1

スコア13

title CHANGED
File without changes
body CHANGED
@@ -54,10 +54,12 @@
54
54
 
55
55
  //この関数内のAddsetで問題が生じる.
56
56
  void covering(vector<Classifier>& CS, const vector<double>& data, vector< vector<double> >& valuepattern, const int t, const string Func) {
57
- int i, j, k;
57
+ int i, j, k, n;
58
+ int nownumber;
58
59
  vector <vector<double> > notvalue;
60
+ vector<double> action;
59
61
  int counter = 0;
60
-
62
+ //マッチセットの中の行動をカウント
61
63
  for(i = 0; i < valuepattern.size(); i++) {
62
64
  for(j = 0; j < CS.size(); j++) {
63
65
  if(CS[j].MS == 1) {
@@ -71,35 +73,50 @@
71
73
  }
72
74
  }
73
75
  }
74
- //すべての種類の行動があればカバーリングを行わずに終了
76
+ //10種類の行動があればカバーリングを行わずに終了
75
- if(counter == valuepattern.size())
77
+ if(counter >= 10)
76
78
  return;
77
-
79
+
78
- //すべての種類の行動がなければカバーリングを行う
80
+ //行動が10種類なければカバーリングを行う
81
+ nownumber = CS.size();
79
82
  if(counter > 0) {
80
- for(i = 0; i < notvalue.size(); i++) {
83
+ for(i = 0; i < notvalue.size() - counter; i++) {
84
+ //rm_cs_of_MAX(CS, n);
81
- CS.push_back(CS[0]);
85
+ CSAddset(CS);
86
+ for(j = 0; j < CS.size(); j++) {
87
+ if(CS[j].a.size() == 0) {
88
+ cout << i+1 << "回目" << "Addsetおかしいぞ" << endl;
89
+ abort();
90
+ }
91
+ }
82
- j = CS.size() - 1;
92
+ k = CS.size() - 1;
83
- CSAddset(CS, j);
84
- CS[j].a = notvalue[i];
93
+ CS[k].a = notvalue[i];
85
94
  do {
86
- CS_propagation(CS, data, t, j, Func);
95
+ CS_propagation(CS, data, t, k, Func);
87
- CS_BPTT(CS, data, t, j, Func);
96
+ CS_BPTT(CS, data, t, k, Func);
88
- } while(CS[j].RNN.o.n[0] <= CS[j].RNN.o.n[1]);
97
+ } while(CS[k].RNN.o.n[0] <= CS[k].RNN.o.n[1]);
89
- CS[j].MS = 1;
98
+ CS[k].MS = 1;
99
+ k++;
90
100
  }
91
101
  }
92
102
  else {
93
103
  for(i = 0; i < valuepattern.size(); i++) {
104
+ //rm_cs_of_MAX(CS, n);
94
- CS.push_back(CS[0]);
105
+ CSAddset(CS);
106
+ for(j = 0; j < CS.size(); j++) {
107
+ if(CS[j].a.size() == 0) {
108
+ cout << i+1 << "回目" << "Addsetおかしいぞ" << endl;
109
+ abort();
110
+ }
111
+ }
95
- j = CS.size() - 1;
112
+ k = CS.size() - 1;
96
- CSAddset(CS, j);
97
- CS[j].a = valuepattern[i];
113
+ CS[k].a = valuepattern[i];
98
114
  do {
99
- CS_propagation(CS, data, t, j, Func);
115
+ CS_propagation(CS, data, t, k, Func);
100
- CS_BPTT(CS, data, t, j, Func);
116
+ CS_BPTT(CS, data, t, k, Func);
101
- } while(CS[j].RNN.o.n[0] <= CS[j].RNN.o.n[1]);
117
+ } while(CS[k].RNN.o.n[0] <= CS[k].RNN.o.n[1]);
102
- CS[j].MS = 1;
118
+ CS[k].MS = 1;
119
+ k++;
103
120
  }
104
121
  }
105
122
  rm_cs_of_add(CS);
@@ -110,6 +127,7 @@
110
127
  ******************追記*******************
111
128
  デバッグで追ったところ, 関数covering内のAddsetを実行後に要素が0になっていることがわかりました.
112
129
  合わせて, Addsetも追記しておきます.
130
+ コメント文では, "2回目Addsetおかしいぞ"と出力されるので, 2回目の実行からおかしくなっているものと思われます.
113
131
  よろしくお願いします.
114
132
  ### 補足情報(FW/ツールのバージョンなど)
115
133
 

1

追記

2018/10/02 17:45

投稿

rosbergf1
rosbergf1

スコア13

title CHANGED
@@ -1,1 +1,1 @@
1
- vector代入に関して問題が生じている.
1
+ 構造体vectorをpush_backする過程で問題が生じている
body CHANGED
@@ -36,40 +36,28 @@
36
36
  } Classifier;
37
37
  //途中部分は省略...
38
38
 
39
- //この関数ではうまく代入される
40
- void CSFirstset(vector<Classifier>& CS, const vector< vector<double> >& valuepattern) {
39
+ void CSAddset(vector<Classifier>& CS) {
41
- int i, j, k;
40
+ int i;
42
- double value;
41
+ CS.push_back(CS[0]);
43
- for(i = 0; i < CS.size(); i++) {
42
+ i = CS.size() - 1;
44
- //RNN
43
+ //RNN
45
- FirstCS_RNN(CS, i);
44
+ FirstCS_RNN(CS, i);
46
- //行動部
47
- j = intrand(0, valuepattern.size() - 1); //intrand(min, max) min~maxの整数値を乱数で返す
48
- CS[i].a = valuepattern[j];
49
- //予測報酬
50
- CS[i].p = 1;
45
+ CS[i].p = 0.1;
51
- //予測誤差
52
- CS[i].e = doublerand(0,1);
46
+ CS[i].e = 0.1;
53
- //適合度
54
- CS[i].F = doublerand(0,1);
47
+ CS[i].F = 0.1;
55
- //経験値
56
- CS[i].exp = 0;
48
+ CS[i].exp = 0;
57
- //アクションセットサイズ
58
- CS[i].as = 0;
49
+ CS[i].as = 0;
59
- //タイムスタンプ
60
- CS[i].ts = 0;
50
+ CS[i].ts = 0;
61
- //マッチセット
62
- CS[i].MS = 0;
51
+ CS[i].MS = 0;
63
- //アクションセット
64
- CS[i].AS = 0;
52
+ CS[i].AS = 0;
65
- }
66
53
  }
54
+
67
- //この関数で問題が生じる.
55
+ //この関数内のAddsetで問題が生じる.
68
56
  void covering(vector<Classifier>& CS, const vector<double>& data, vector< vector<double> >& valuepattern, const int t, const string Func) {
69
57
  int i, j, k;
70
58
  vector <vector<double> > notvalue;
71
59
  int counter = 0;
72
- //マッチセットの中の行動をカウント
60
+
73
61
  for(i = 0; i < valuepattern.size(); i++) {
74
62
  for(j = 0; j < CS.size(); j++) {
75
63
  if(CS[j].MS == 1) {
@@ -92,11 +80,11 @@
92
80
  for(i = 0; i < notvalue.size(); i++) {
93
81
  CS.push_back(CS[0]);
94
82
  j = CS.size() - 1;
95
- CSAddset(CS, j); //ここでは代入していません.
83
+ CSAddset(CS, j);
96
- CS[j].a = notvalue[i]; //この部分でのみ代入.
84
+ CS[j].a = notvalue[i];
97
85
  do {
98
- CS_propagation(CS, data, t, j, Func); //ここでは代入していないので気にしないでください.
86
+ CS_propagation(CS, data, t, j, Func);
99
- CS_BPTT(CS, data, t, j, Func); //同上
87
+ CS_BPTT(CS, data, t, j, Func);
100
88
  } while(CS[j].RNN.o.n[0] <= CS[j].RNN.o.n[1]);
101
89
  CS[j].MS = 1;
102
90
  }
@@ -106,7 +94,7 @@
106
94
  CS.push_back(CS[0]);
107
95
  j = CS.size() - 1;
108
96
  CSAddset(CS, j);
109
- CS[j].a = valuepattern[i]; //この部分でのみ代入
97
+ CS[j].a = valuepattern[i];
110
98
  do {
111
99
  CS_propagation(CS, data, t, j, Func);
112
100
  CS_BPTT(CS, data, t, j, Func);
@@ -119,8 +107,10 @@
119
107
  ```
120
108
  ### やってみたこと
121
109
  vectorの構造体を追加したあとにいろいろとメンバ変数に代入しているのですが, その過程で問題が生じているみたいです.
122
-
110
+ ******************追記*******************
123
-
111
+ デバッグで追ったところ, 関数covering内のAddsetを実行後に要素が0になっていることがわかりました.
112
+ 合わせて, Addsetも追記しておきます.
113
+ よろしくお願いします.
124
114
  ### 補足情報(FW/ツールのバージョンなど)
125
115
 
126
116
  環境はMacです.