資源簡介
用C++實現了梯度下降求多元函數極值的算法,有可能會陷入局部最優解。

代碼片段和文件信息
#include?“GD.h“
#include
using?namespace?std;
vector?operator+(const?vector&?v1?const?vector&?v2)?{
//?假設?v1.size()?==?v2.size()
vector?r;
r.reserve(v1.size());
for?(auto?i?=?0;?i? r.push_back(v1[i]?+?v2[i]);
}
return?r;
}
vector?operator/(const?vector&?v1?const?float&?v2){
vector?r;
r.reserve(v1.size());
for?(auto?i?=?0;?i? r.push_back(v1[i]?/?v2);
}
return?r;
}
vector?operator*(const?vector&?v1?const?float&?v2){
vector?r;
r.reserve(v1.size());
for?(auto?i?=?0;?i? r.push_back(v1[i]?*?v2);
}
return?r;
}
float?model(vector?vec){
float?sum?=?0;
for(auto?i?=?0;?i? sum?+=?vec[i]*vec[i];
}
return?sqrt(sum);
}
GradDes::GradDes(float?step?std::vector?init_pos){
this->step?=?step;
this->last_pos?=?init_pos;
this->element?=?init_pos.size();
}
float?GradDes::function(std::vector?x){
????//定義想求極值的函數
return?exp(-x[0]?*?x[0]?-?x[1]?*?x[1]);
}
MaxVal?GradDes::startIteration(){
std::vector?train_x;
float?temp_grad;
float?sum_grad?=?0;
float?last_sum?=?0;
float?lastY?=?0;
int?iter_num?=?0;
MaxVal?finXY;
while?(iter_num?500){
std::vector?grad;
++iter_num;
train_x?=?last_pos;
cout?< cout?<“第“?< for?(int?i?=?0;?i? train_x[i]?+=?step;
temp_grad?=?(function(train_x)?-?function(last_pos))?/?(train_x[i]?-?last_pos[i]);
cout?< if?(temp_grad?>?0)?grad.push_back(temp_grad);
else?if?(temp_grad?0){
train_x[i]?-=?2?*?step;
grad.push_back((function(train_x)?-?function(last_pos))?/?(train_x[i]?-?last_pos[i]));
}
else{
train_x[i]?-=?step;
grad.push_back(0);
}
}
sum_grad?=?model(grad);
grad?=?grad?/?sum_grad?*?sqrt(step);
last_pos?=?last_pos?+?grad;
cout?<“函數輸出為:“?< if?(abs(function(last_pos)?-?lastY)? lastY?=?function(last_pos);
}
finXY.x?=?last_pos;
finXY.y?=?function(last_pos);
return?finXY;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-12-25?16:55??GD\
?????文件????????2249??2016-12-25?16:51??GD\GD.cpp
?????文件?????????422??2016-12-25?16:54??GD\GD.h
?????文件?????????157??2016-12-25?16:54??GD\main.cpp
- 上一篇:C語言大作業西北工業大學
- 下一篇:windows下c實現telnet代碼
評論
共有 條評論