tmp update
This commit is contained in:
parent
ba43d30e06
commit
ec60030b91
@ -46,10 +46,11 @@ int main(int argc, char const *argv[])
|
|||||||
|
|
||||||
lgd_para p = e.default_lgd_para();
|
lgd_para p = e.default_lgd_para();
|
||||||
p.beta = 1.2;
|
p.beta = 1.2;
|
||||||
|
p.seed = 125;
|
||||||
e.set_lgd_para(p);
|
e.set_lgd_para(p);
|
||||||
|
|
||||||
array<double> dist;
|
array<double> dist;
|
||||||
e.get_levy_distribution(dist, 125);
|
e.get_levy_distribution(dist);
|
||||||
|
|
||||||
double m = dist.mean();
|
double m = dist.mean();
|
||||||
double s = dist.std();
|
double s = dist.std();
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
/**
|
/**
|
||||||
* Default parameter for the Lévy-Gradient Descent (L-GD) method.
|
* Default parameter for the Lévy-Gradient Descent (L-GD) method.
|
||||||
*/
|
*/
|
||||||
static const gctl::lgd_para lgd_defparam = {1000, 0, 1e-5, 1.0, 1.5, 0.01, 1e-8, -1.0};
|
static const gctl::lgd_para lgd_defparam = {1000, 0, 0, 1e-5, 1.0, 1.5, 0.01, 1e-8, -1.0};
|
||||||
|
|
||||||
gctl::lgd_solver::lgd_solver()
|
gctl::lgd_solver::lgd_solver()
|
||||||
{
|
{
|
||||||
@ -154,7 +154,7 @@ void gctl::lgd_solver::save_lgd_trace(std::string trace_file)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gctl::lgd_return_code gctl::lgd_solver::get_levy_distribution(array<double> &dist, unsigned int seed)
|
gctl::lgd_return_code gctl::lgd_solver::get_levy_distribution(array<double> &dist)
|
||||||
{
|
{
|
||||||
if (lgd_param_.flight_times <= 0) return LGD_INVALID_MAX_ITERATIONS;
|
if (lgd_param_.flight_times <= 0) return LGD_INVALID_MAX_ITERATIONS;
|
||||||
if (lgd_param_.beta <= 1.0 || lgd_param_.beta >= 2.0) return LGD_INVALID_BETA;
|
if (lgd_param_.beta <= 1.0 || lgd_param_.beta >= 2.0) return LGD_INVALID_BETA;
|
||||||
@ -164,8 +164,11 @@ gctl::lgd_return_code gctl::lgd_solver::get_levy_distribution(array<double> &dis
|
|||||||
double stddev_u = pow((gamma1*sin(0.5*GCTL_Pi*lgd_param_.beta))/
|
double stddev_u = pow((gamma1*sin(0.5*GCTL_Pi*lgd_param_.beta))/
|
||||||
(gamma2*lgd_param_.beta*pow(2, 0.5*(lgd_param_.beta-1.0))), 1.0/lgd_param_.beta);
|
(gamma2*lgd_param_.beta*pow(2, 0.5*(lgd_param_.beta-1.0))), 1.0/lgd_param_.beta);
|
||||||
|
|
||||||
if (seed == 0) seed = std::chrono::system_clock::now().time_since_epoch().count();
|
unsigned int sd;
|
||||||
std::default_random_engine generator(seed);
|
if (lgd_param_.seed == 0) sd = std::chrono::system_clock::now().time_since_epoch().count();
|
||||||
|
else sd = lgd_param_.seed;
|
||||||
|
|
||||||
|
std::default_random_engine generator(sd);
|
||||||
std::normal_distribution<double> dist_u(0, stddev_u);
|
std::normal_distribution<double> dist_u(0, stddev_u);
|
||||||
std::normal_distribution<double> dist_v(0, lgd_param_.stddev_v);
|
std::normal_distribution<double> dist_v(0, lgd_param_.stddev_v);
|
||||||
std::uniform_real_distribution<double> dist_s(1.0, 2.0);
|
std::uniform_real_distribution<double> dist_s(1.0, 2.0);
|
||||||
@ -386,8 +389,11 @@ gctl::lgd_return_code gctl::lgd_solver::lgd(array<double> &best_m, array<double>
|
|||||||
double gamma2 = tgamma(0.5*(lgd_param_.beta + 1.0));
|
double gamma2 = tgamma(0.5*(lgd_param_.beta + 1.0));
|
||||||
double stddev_u = pow((gamma1*sin(0.5*GCTL_Pi*lgd_param_.beta)) / (gamma2*lgd_param_.beta*pow(2, 0.5*(lgd_param_.beta-1.0))), 1.0/lgd_param_.beta);
|
double stddev_u = pow((gamma1*sin(0.5*GCTL_Pi*lgd_param_.beta)) / (gamma2*lgd_param_.beta*pow(2, 0.5*(lgd_param_.beta-1.0))), 1.0/lgd_param_.beta);
|
||||||
|
|
||||||
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
|
unsigned int sd;
|
||||||
std::default_random_engine generator(seed);
|
if (lgd_param_.seed == 0) sd = std::chrono::system_clock::now().time_since_epoch().count();
|
||||||
|
else sd = lgd_param_.seed;
|
||||||
|
|
||||||
|
std::default_random_engine generator(sd);
|
||||||
std::normal_distribution<double> dist_u(0, stddev_u);
|
std::normal_distribution<double> dist_u(0, stddev_u);
|
||||||
std::normal_distribution<double> dist_v(0, lgd_param_.stddev_v);
|
std::normal_distribution<double> dist_v(0, lgd_param_.stddev_v);
|
||||||
std::uniform_real_distribution<double> dist_s(1.0, 2.0);
|
std::uniform_real_distribution<double> dist_s(1.0, 2.0);
|
||||||
|
@ -88,6 +88,12 @@ namespace gctl
|
|||||||
*/
|
*/
|
||||||
int batch;
|
int batch;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Random seed for generating the Lévy distribution. Input zero for setting the seed according
|
||||||
|
* to the current time value. The default is 0.
|
||||||
|
*/
|
||||||
|
int seed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Epsilon for the mean convergence test. This parameter determines the accuracy
|
* Epsilon for the mean convergence test. This parameter determines the accuracy
|
||||||
* with which the mean solution is to be found. The default is 1e-5.
|
* with which the mean solution is to be found. The default is 1e-5.
|
||||||
@ -176,11 +182,10 @@ namespace gctl
|
|||||||
* @brief 按照levy分布采样一组数据,参数可通过set_lgd_para函数设置
|
* @brief 按照levy分布采样一组数据,参数可通过set_lgd_para函数设置
|
||||||
*
|
*
|
||||||
* @param dist 返回的levy分布
|
* @param dist 返回的levy分布
|
||||||
* @param seed 随机种子
|
|
||||||
*
|
*
|
||||||
* @return 状态代码
|
* @return 状态代码
|
||||||
*/
|
*/
|
||||||
lgd_return_code get_levy_distribution(array<double> &dist, unsigned int seed = 0);
|
lgd_return_code get_levy_distribution(array<double> &dist);
|
||||||
|
|
||||||
lgd_para default_lgd_para();
|
lgd_para default_lgd_para();
|
||||||
void set_lgd_para(const lgd_para ¶m);
|
void set_lgd_para(const lgd_para ¶m);
|
||||||
|
Loading…
Reference in New Issue
Block a user