我正在通过openAI gym
中的http连接使用C++
(由python开发),该连接在
[https://github.com/openai/gym-http-api/tree/master][1]
。通过调用gym_http_server.py
创建服务器,并且C++
目录中提供cpp-binding
代码。我也用C ++开发了一个简单的全连接神经网络,并实现了一种算法来学习玩gym
中可用的一些游戏。当我的神经网络较小时,如[10,10]
,一切都会正常运行。但是,一旦我将尺寸增加到更大的网络(例如[32,64,64,32]
),卷曲就会失败,并显示以下错误:
curle_couldnt_connect
经过数百次训练。它发生在POST
函数中:
Json::Value POST(const std::string& route, const std::string& post_data)
{
std::string url = "http://" + addr + route;
if (verbose) printf("POST %s\n%s\n", url.c_str(), post_data.c_str());
curl_easy_setopt(h.get(), CURLOPT_URL, url.c_str());
curl_easy_setopt(h.get(), CURLOPT_PORT, port);
std::string answer;
curl_easy_setopt(h.get(), CURLOPT_WRITEDATA, &answer);
curl_easy_setopt(h.get(), CURLOPT_POST, 1);
curl_easy_setopt(h.get(), CURLOPT_POSTFIELDS, post_data.c_str());
curl_easy_setopt(h.get(), CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)post_data.size());
curl_easy_setopt(h.get(), CURLOPT_HTTPHEADER, headers.get());
CURLcode r = curl_easy_perform(h.get());
if (r)
throw std::runtime_error(curl_error_buf.data());
Json::Value j;
throw_server_error_or_response_code(answer, j);
return j;
}
被称为
Json::Value ans = client->POST("/v1/envs/" + instance_id + "/step/", act_json.toStyledString());
,都可以在“ gym_binding.cpp”中找到。
奇怪的是,无论网络规模如何,通常在大约5000次成功连接后都会出现此问题。例如,我使用两个不同的网络维度来运行它,每次四次:当网络为[32,64,64,64,32]
时,它发生在[5120, 5134, 7359, 7375]
之后;当网络为[60,60]
时,它会在[5134, 5167, 2678, 5272]
次迭代后失败。我试图找到遇到此问题的最小网络,但找不到给定的网络。例如,有时[30,60]
有效,而[30,30]
无效。
我搜索了很多有关curl
的信息,看来这是常规连接错误。但是,我的有点奇怪,因为它基于神经网络维度,并且有时(尽管并非总是如此)可以工作。我还监视了memory
和cpu
的使用情况,发现任何不正常的情况。
另外,还有一个观察,我不得不重新启动服务器,然后它可以正常工作一天半,尽管之后它再次停止工作。 感谢您的帮助或评论。