亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lbfgs.c

?? This library is a C port of the implementation of Limited-memory Broyden-Fletcher-Goldfarb-Shanno (L
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *      Limited memory BFGS (L-BFGS). * * Copyright (c) 1990, Jorge Nocedal * Copyright (c) 2007,2008,2009 Naoaki Okazaki * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. *//* $Id: lbfgs.c 55 2009-02-23 14:51:21Z naoaki $ *//*This library is a C port of the FORTRAN implementation of Limited-memoryBroyden-Fletcher-Goldfarb-Shanno (L-BFGS) method written by Jorge Nocedal.The original FORTRAN source code is available at:http://www.ece.northwestern.edu/~nocedal/lbfgs.htmlThe L-BFGS algorithm is described in:    - Jorge Nocedal.      Updating Quasi-Newton Matrices with Limited Storage.      <i>Mathematics of Computation</i>, Vol. 35, No. 151, pp. 773--782, 1980.    - Dong C. Liu and Jorge Nocedal.      On the limited memory BFGS method for large scale optimization.      <i>Mathematical Programming</i> B, Vol. 45, No. 3, pp. 503-528, 1989.The line search algorithms used in this implementation are described in:    - John E. Dennis and Robert B. Schnabel.      <i>Numerical Methods for Unconstrained Optimization and Nonlinear      Equations</i>, Englewood Cliffs, 1983.    - Jorge J. More and David J. Thuente.      Line search algorithm with guaranteed sufficient decrease.      <i>ACM Transactions on Mathematical Software (TOMS)</i>, Vol. 20, No. 3,      pp. 286-307, 1994.This library also implements Orthant-Wise Limited-memory Quasi-Newton (OWL-QN)method presented in:    - Galen Andrew and Jianfeng Gao.      Scalable training of L1-regularized log-linear models.      In <i>Proceedings of the 24th International Conference on Machine      Learning (ICML 2007)</i>, pp. 33-40, 2007.I would like to thank the original author, Jorge Nocedal, who has beendistributing the effieicnt and explanatory implementation in an open sourcelicence.*/#ifdef  HAVE_CONFIG_H#include <config.h>#endif/*HAVE_CONFIG_H*/#include <stdio.h>#include <stdlib.h>#include <math.h>#include <lbfgs.h>#ifdef  _MSC_VER#define inline  __inlinetypedef unsigned int uint32_t;#endif/*_MSC_VER*/#if     defined(USE_SSE) && defined(__SSE2__) && LBFGS_FLOAT == 64/* Use SSE2 optimization for 64bit double precision. */#include "arithmetic_sse_double.h"#elif   defined(USE_SSE) && defined(__SSE__) && LBFGS_FLOAT == 32/* Use SSE optimization for 32bit float precision. */#include "arithmetic_sse_float.h"#else/* No CPU specific optimization. */#include "arithmetic_ansi.h"#endif#define min2(a, b)      ((a) <= (b) ? (a) : (b))#define max2(a, b)      ((a) >= (b) ? (a) : (b))#define max3(a, b, c)   max2(max2((a), (b)), (c));struct tag_callback_data {    int n;    void *instance;    lbfgs_evaluate_t proc_evaluate;    lbfgs_progress_t proc_progress;};typedef struct tag_callback_data callback_data_t;struct tag_iteration_data {    lbfgsfloatval_t alpha;    lbfgsfloatval_t *s;     /* [n] */    lbfgsfloatval_t *y;     /* [n] */    lbfgsfloatval_t ys;     /* vecdot(y, s) */};typedef struct tag_iteration_data iteration_data_t;static const lbfgs_parameter_t _defparam = {    6, 1e-5, 0, 1e-5,    0, LBFGS_LINESEARCH_DEFAULT, 40,    1e-20, 1e20, 1e-4, 0.9, 1.0e-16,    0.0, 0, -1,};/* Forward function declarations. */typedef int (*line_search_proc)(    int n,    lbfgsfloatval_t *x,    lbfgsfloatval_t *f,    lbfgsfloatval_t *g,    lbfgsfloatval_t *s,    lbfgsfloatval_t *stp,    const lbfgsfloatval_t* xp,    const lbfgsfloatval_t* gp,    lbfgsfloatval_t *wa,    callback_data_t *cd,    const lbfgs_parameter_t *param    );    static int line_search_backtracking(    int n,    lbfgsfloatval_t *x,    lbfgsfloatval_t *f,    lbfgsfloatval_t *g,    lbfgsfloatval_t *s,    lbfgsfloatval_t *stp,    const lbfgsfloatval_t* xp,    const lbfgsfloatval_t* gp,    lbfgsfloatval_t *wa,    callback_data_t *cd,    const lbfgs_parameter_t *param    );static int line_search_backtracking_owlqn(    int n,    lbfgsfloatval_t *x,    lbfgsfloatval_t *f,    lbfgsfloatval_t *g,    lbfgsfloatval_t *s,    lbfgsfloatval_t *stp,    const lbfgsfloatval_t* xp,    const lbfgsfloatval_t* gp,    lbfgsfloatval_t *wp,    callback_data_t *cd,    const lbfgs_parameter_t *param    );static int line_search_morethuente(    int n,    lbfgsfloatval_t *x,    lbfgsfloatval_t *f,    lbfgsfloatval_t *g,    lbfgsfloatval_t *s,    lbfgsfloatval_t *stp,    const lbfgsfloatval_t* xp,    const lbfgsfloatval_t* gp,    lbfgsfloatval_t *wa,    callback_data_t *cd,    const lbfgs_parameter_t *param    );static int update_trial_interval(    lbfgsfloatval_t *x,    lbfgsfloatval_t *fx,    lbfgsfloatval_t *dx,    lbfgsfloatval_t *y,    lbfgsfloatval_t *fy,    lbfgsfloatval_t *dy,    lbfgsfloatval_t *t,    lbfgsfloatval_t *ft,    lbfgsfloatval_t *dt,    const lbfgsfloatval_t tmin,    const lbfgsfloatval_t tmax,    int *brackt    );static lbfgsfloatval_t owlqn_x1norm(    const lbfgsfloatval_t* x,    const int start,    const int n    );static void owlqn_pseudo_gradient(    lbfgsfloatval_t* pg,    const lbfgsfloatval_t* x,    const lbfgsfloatval_t* g,    const int n,    const lbfgsfloatval_t c,    const int start,    const int end    );static void owlqn_project(    lbfgsfloatval_t* d,    const lbfgsfloatval_t* sign,    const int start,    const int end    );#if     defined(USE_SSE) && (defined(__SSE__) || defined(__SSE2__))static int round_out_variables(int n){    n += 7;    n /= 8;    n *= 8;    return n;}#endif/*defined(USE_SSE)*/lbfgsfloatval_t* lbfgs_malloc(int n){#if     defined(USE_SSE) && (defined(__SSE__) || defined(__SSE2__))    n = round_out_variables(n);#endif/*defined(USE_SSE)*/    return (lbfgsfloatval_t*)vecalloc(sizeof(lbfgsfloatval_t) * n);}void lbfgs_free(lbfgsfloatval_t *x){    vecfree(x);}void lbfgs_parameter_init(lbfgs_parameter_t *param){    memcpy(param, &_defparam, sizeof(*param));}int lbfgs(    int n,    lbfgsfloatval_t *x,    lbfgsfloatval_t *ptr_fx,    lbfgs_evaluate_t proc_evaluate,    lbfgs_progress_t proc_progress,    void *instance,    lbfgs_parameter_t *_param    ){    int ret;    int i, j, k, ls, end, bound;    lbfgsfloatval_t step;    /* Constant parameters and their default values. */    lbfgs_parameter_t param = (_param != NULL) ? (*_param) : _defparam;    const int m = param.m;    lbfgsfloatval_t *xp = NULL;    lbfgsfloatval_t *g = NULL, *gp = NULL, *pg = NULL;    lbfgsfloatval_t *d = NULL, *w = NULL, *pf = NULL;    iteration_data_t *lm = NULL, *it = NULL;    lbfgsfloatval_t ys, yy;    lbfgsfloatval_t xnorm, gnorm, beta;    lbfgsfloatval_t fx = 0.;    lbfgsfloatval_t rate = 0.;    line_search_proc linesearch = line_search_morethuente;    /* Construct a callback data. */    callback_data_t cd;    cd.n = n;    cd.instance = instance;    cd.proc_evaluate = proc_evaluate;    cd.proc_progress = proc_progress;#if     defined(USE_SSE) && (defined(__SSE__) || defined(__SSE2__))    /* Round out the number of variables. */    n = round_out_variables(n);#endif/*defined(USE_SSE)*/    /* Check the input parameters for errors. */    if (n <= 0) {        return LBFGSERR_INVALID_N;    }#if     defined(USE_SSE) && (defined(__SSE__) || defined(__SSE2__))    if (n % 8 != 0) {        return LBFGSERR_INVALID_N_SSE;    }    if (((unsigned short)x & 0x000F) != 0) {        return LBFGSERR_INVALID_X_SSE;    }#endif/*defined(USE_SSE)*/    if (param.epsilon < 0.) {        return LBFGSERR_INVALID_EPSILON;    }    if (param.past < 0) {        return LBFGSERR_INVALID_TESTPERIOD;    }    if (param.delta < 0.) {        return LBFGSERR_INVALID_DELTA;    }    if (param.min_step < 0.) {        return LBFGSERR_INVALID_MINSTEP;    }    if (param.max_step < param.min_step) {        return LBFGSERR_INVALID_MAXSTEP;    }    if (param.ftol < 0.) {        return LBFGSERR_INVALID_FTOL;    }    if (param.gtol < 0.) {        return LBFGSERR_INVALID_GTOL;    }    if (param.xtol < 0.) {        return LBFGSERR_INVALID_XTOL;    }    if (param.max_linesearch <= 0) {        return LBFGSERR_INVALID_MAXLINESEARCH;    }    if (param.orthantwise_c < 0.) {        return LBFGSERR_INVALID_ORTHANTWISE;    }    if (param.orthantwise_start < 0 || n < param.orthantwise_start) {        return LBFGSERR_INVALID_ORTHANTWISE_START;    }    if (param.orthantwise_end < 0) {        param.orthantwise_end = n;    }    if (n < param.orthantwise_end) {        return LBFGSERR_INVALID_ORTHANTWISE_END;    }    if (param.orthantwise_c != 0.) {        switch (param.linesearch) {        case LBFGS_LINESEARCH_BACKTRACKING:            linesearch = line_search_backtracking_owlqn;            break;        default:            /* Only the backtracking method is available. */            return LBFGSERR_INVALID_LINESEARCH;        }    } else {        switch (param.linesearch) {        case LBFGS_LINESEARCH_MORETHUENTE:            linesearch = line_search_morethuente;            break;        case LBFGS_LINESEARCH_BACKTRACKING:        case LBFGS_LINESEARCH_BACKTRACKING_STRONG:            linesearch = line_search_backtracking;            break;        default:            return LBFGSERR_INVALID_LINESEARCH;        }    }    /* Allocate working space. */    xp = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));    g = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));    gp = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));    d = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));    w = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));    if (xp == NULL || g == NULL || gp == NULL || d == NULL || w == NULL) {        ret = LBFGSERR_OUTOFMEMORY;        goto lbfgs_exit;    }    if (param.orthantwise_c != 0.) {        /* Allocate working space for OW-LQN. */        pg = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));        if (pg == NULL) {            ret = LBFGSERR_OUTOFMEMORY;            goto lbfgs_exit;        }    }    /* Allocate limited memory storage. */    lm = (iteration_data_t*)vecalloc(m * sizeof(iteration_data_t));    if (lm == NULL) {        ret = LBFGSERR_OUTOFMEMORY;        goto lbfgs_exit;    }    /* Initialize the limited memory. */    for (i = 0;i < m;++i) {        it = &lm[i];        it->alpha = 0;        it->ys = 0;        it->s = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));        it->y = (lbfgsfloatval_t*)vecalloc(n * sizeof(lbfgsfloatval_t));        if (it->s == NULL || it->y == NULL) {            ret = LBFGSERR_OUTOFMEMORY;            goto lbfgs_exit;        }    }    /* Allocate an array for storing previous values of the objective function. */    if (0 < param.past) {        pf = (lbfgsfloatval_t*)vecalloc(param.past * sizeof(lbfgsfloatval_t));    }    /* Evaluate the function value and its gradient. */    fx = cd.proc_evaluate(cd.instance, x, g, cd.n, 0);    if (0. != param.orthantwise_c) {        /* Compute the L1 norm of the variable and add it to the object value. */        xnorm = owlqn_x1norm(x, param.orthantwise_start, param.orthantwise_end);        fx += xnorm * param.orthantwise_c;        owlqn_pseudo_gradient(            pg, x, g, n,            param.orthantwise_c, param.orthantwise_start, param.orthantwise_end            );    }    /* Store the initial value of the objective function. */    if (pf != NULL) {        pf[0] = fx;    }    /*        Compute the direction;        we assume the initial hessian matrix H_0 as the identity matrix.     */    if (param.orthantwise_c == 0.) {        vecncpy(d, g, n);    } else {        vecncpy(d, pg, n);    }    /*       Make sure that the initial variables are not a minimizer.     */    vec2norm(&xnorm, x, n);    if (param.orthantwise_c == 0.) {        vec2norm(&gnorm, g, n);    } else {        vec2norm(&gnorm, pg, n);    }    if (xnorm < 1.0) xnorm = 1.0;    if (gnorm / xnorm <= param.epsilon) {        ret = LBFGS_ALREADY_MINIMIZED;        goto lbfgs_exit;    }    /* Compute the initial step:        step = 1.0 / sqrt(vecdot(d, d, n))     */    vec2norminv(&step, d, n);    k = 1;    end = 0;    for (;;) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道a无线码一区v| 亚洲一二三四在线观看| 狠狠色丁香婷综合久久| 欧美xxxxx牲另类人与| 日韩国产欧美在线视频| 91精品国产手机| 久久99热99| 国产精品婷婷午夜在线观看| 99久久免费视频.com| 一区二区日韩av| 69精品人人人人| 韩国一区二区视频| 亚洲欧洲一区二区在线播放| 色婷婷久久久综合中文字幕| 五月综合激情网| 久久综合五月天婷婷伊人| 成a人片国产精品| 亚洲国产精品影院| 精品国产一区二区三区久久久蜜月| 精品一区二区三区av| 国产精品麻豆久久久| 欧美日韩在线播| 国产一级精品在线| 一区二区三区产品免费精品久久75| 欧美日韩高清一区二区不卡 | 国产精品私房写真福利视频| 国产精品白丝av| 亚洲人成伊人成综合网小说| 欧美一区欧美二区| av中文字幕亚洲| 奇米综合一区二区三区精品视频 | 久久99精品国产麻豆婷婷洗澡| 久久这里只有精品首页| 91麻豆免费视频| 久久69国产一区二区蜜臀| 亚洲欧美另类小说视频| 欧美xxxxx牲另类人与| 91丨九色丨黑人外教| 麻豆一区二区在线| 亚洲免费观看高清| 久久久电影一区二区三区| 欧美亚洲高清一区| 成人丝袜18视频在线观看| 日韩黄色在线观看| 亚洲欧美日韩成人高清在线一区| 56国语精品自产拍在线观看| 99r精品视频| 国产麻豆视频一区二区| 日日夜夜精品视频天天综合网| 中文字幕制服丝袜一区二区三区| 欧美成人在线直播| 欧美高清视频在线高清观看mv色露露十八| 国产成人av一区二区| 麻豆精品一二三| 午夜亚洲福利老司机| 亚洲日本va午夜在线影院| 26uuu精品一区二区 | 欧美日韩另类一区| 成人动漫在线一区| 国产自产视频一区二区三区| 亚洲国产成人av| 一区二区三区中文字幕在线观看| 国产视频一区二区三区在线观看| 日韩一区二区视频| 欧美久久高跟鞋激| 在线免费观看日韩欧美| 99re成人在线| av电影在线不卡| thepron国产精品| 成人久久视频在线观看| 国产精品1区2区| 国产精品亚洲第一区在线暖暖韩国| 老色鬼精品视频在线观看播放| 日本在线不卡视频| 日韩成人免费电影| 免费av成人在线| 精品一区二区在线观看| 久久99深爱久久99精品| 激情综合网天天干| 国产老妇另类xxxxx| 国产一区二区不卡| 国产suv精品一区二区6| 国产东北露脸精品视频| 成人午夜看片网址| 99视频热这里只有精品免费| 99视频在线精品| 欧美视频完全免费看| 欧美男生操女生| 日韩欧美区一区二| 午夜天堂影视香蕉久久| 亚洲国产一区二区三区| 日韩精品欧美精品| 另类小说综合欧美亚洲| 国产美女在线精品| gogo大胆日本视频一区| 91久久香蕉国产日韩欧美9色| 91久久线看在观草草青青| 欧美高清视频在线高清观看mv色露露十八| 91麻豆精品国产91久久久使用方法 | 日本午夜精品视频在线观看| 美女脱光内衣内裤视频久久网站| 激情综合色综合久久综合| 国产不卡视频一区| 色欧美片视频在线观看| 91麻豆精品国产91久久久使用方法| 日韩女优毛片在线| 国产精品麻豆网站| 亚洲大片在线观看| 韩国精品主播一区二区在线观看| 国产91高潮流白浆在线麻豆 | 国产无人区一区二区三区| 国产精品国产精品国产专区不片| 亚洲一区二区视频| 另类中文字幕网| 色婷婷综合久久久中文一区二区 | 成人蜜臀av电影| 欧美肥大bbwbbw高潮| 久久久精品欧美丰满| 一区二区视频在线| 精品在线一区二区| 色综合天天综合网天天看片| 91精品蜜臀在线一区尤物| 国产情人综合久久777777| 亚洲国产精品一区二区尤物区| 狠狠色狠狠色综合| 欧美日韩亚洲国产综合| 久久久91精品国产一区二区精品 | 欧美日韩亚洲不卡| 欧美国产欧美亚州国产日韩mv天天看完整| 精品一区二区三区在线播放视频| 国产91精品一区二区麻豆亚洲| 欧美日韩视频第一区| 国产精品女主播av| 久久av老司机精品网站导航| 在线精品视频一区二区| 国产亚洲制服色| 美腿丝袜亚洲三区| 欧美性大战久久久久久久| 中文字幕va一区二区三区| 久久精品国产免费| 欧美日韩精品一区二区在线播放| 日本一区二区视频在线观看| 蜜桃一区二区三区在线观看| 91成人免费网站| 国产精品女人毛片| 国产伦精一区二区三区| 日韩欧美色综合网站| 亚洲大片精品永久免费| 色综合网站在线| 中文字幕中文字幕一区二区| 国产高清精品久久久久| 欧美大片在线观看一区| 五月婷婷综合激情| 欧美亚洲自拍偷拍| 亚洲欧美日韩久久| 成人av免费在线观看| 久久九九久久九九| 国产在线乱码一区二区三区| 欧美电影免费观看高清完整版在线| 亚洲福利一二三区| 欧美日韩一区在线| 亚洲午夜免费电影| 欧美视频中文一区二区三区在线观看| 中文字幕视频一区| 91丨porny丨首页| 亚洲欧洲精品一区二区三区| 盗摄精品av一区二区三区| 欧美韩日一区二区三区四区| 国产精品99久久久久久久vr| 久久欧美一区二区| 国产成人啪免费观看软件| 国产亚洲欧美在线| 成人免费看视频| 国产精品国产a级| 91在线视频免费观看| 亚洲日本免费电影| 在线观看一区二区精品视频| 亚洲一区二区精品视频| 精品视频一区 二区 三区| 亚洲无线码一区二区三区| 欧美日本视频在线| 免费精品视频在线| 欧美精品一区二区三区高清aⅴ| 国产一区二区三区不卡在线观看| 国产喂奶挤奶一区二区三区| 不卡视频免费播放| 亚洲自拍另类综合| 91精品国产91久久久久久一区二区 | 成人国产亚洲欧美成人综合网| 中文字幕在线观看一区| 91福利视频久久久久| 日本中文字幕一区二区视频| www久久精品| jlzzjlzz亚洲日本少妇| 亚洲国产欧美在线| 精品欧美久久久| 97精品久久久午夜一区二区三区| 亚洲高清久久久| 精品久久久久久久人人人人传媒| 成人一区二区三区中文字幕|