我在a.h
一個以下設計:更新存儲在映射向量的向量
class A {
virtual void updateCoefficients(std::string /*state*/, std::vector<std::vector<double>>& /*coefs*/,
double /*reward*/) {}
protected:
std::map<std::string, std::vector<std::vector<double>>> heuristic;
}
class B : public A {
virtual void updateCoefficients(std::string state, std::vector<std::vector<double>>& coefs,
double reward) override;
}
和在a.cc
:
void B::updateCoefficients(std::string state, std::vector<std::vector<double>>& coefs,
double reward) {
for(unsigned i = 0; i < coefs.size(); i++) {
coefs[i][0] += 1;
}
for(unsigned i = 0; i < coefs.size(); i++) {
coefs[i][1] += 2;
}
}
而我請從class A
定義的方法updateCoefficients
:
void A::foo(std::string state, std::string action, double const& reward) {
if (heuristic.count(action)) {
updateCoefficients(state, heuristic[action], reward);
} else {
std::vector<std::vector<double>> coefs(20, std::vector<double>(2, 0.0));
heuristic[action] = coefs;
}
}
問題是,矢量地圖中的heuristic
沒有被更新,但每當調用updateCoefficients
時,所有向量都是0,就像它們初始化時一樣。我究竟做錯了什麼?
想法是讓class A
作爲一個基礎,它包含所有必須使用的方法和變量,並在繼承class A
的基類的子類中定義不同的updateCoefficients
方法。
編輯
OK,所以整個代碼可以在這裏找到OfflineHeuristic.h和OfflineHeuristic.cc。類別State
,ActionState
,THTS
中的信息是無關緊要的。我試過了可能的修正,但仍然,地圖heuristic
不斷填充零值。從其他類中調用的方法是offlineHeuristic->learn(state, action, reward)
。
編輯2
誤差實際上是在另一個地方,在代碼邏輯。上面粘貼的代碼實際上是正確的。如果有人遇到類似問題,我會留下問題。或者,如果這不是一件好事,請讓我知道,所以我刪除了這個問題。
您需要發佈一個MCVE。我們不知道其他代碼中發生了什麼。 –
@ĐorđeRelić我只能重複RichardHodges,你需要發佈一個(http://stackoverflow.com/help/mcve)[Minimal,Complete,and Verifiable Example]。整個代碼很難「最小化」。爲了使它成爲你的工作,而不是我們的工作。 – Aziuth
@ĐorđeRelić,不幸的是,我們沒有在這裏調試代碼。如果您很難從命令行使用GDB - 嘗試一些IDE(QTCreator是免費的,可以在沒有QT的情況下工作,CLion也是很好的選擇......)。你應該給我們一些最小的例子,它可以被複制粘貼並且在沒有變化的情況下運行 - 我們將會提供幫助,最好的方式是使用一些在線編譯器,比如IdeOne – Evgeniy