GAMS系列分享22-GAMS高级应用—场景缩减(Scenario Reduction)

       考虑系统的不确定下,一般可能会用到随机优化,

                 随机优化面临一个重要的概念就是  场景缩减

                           网上没有找到 场景缩减的例子  ,这里我就推荐一点学习的资料吧。

                                       就是用这些资料,完成了场景缩减的编程,大家也可以尝试一下呦。

目录

1,官网文档资料

2,官网编程实例

3,带飞重要知识点



 

1,官网文档资料

     help ->  doc ->  solvers -> SCENRED

     就是这个文档,不多,20多页。

     放一下,一些比较重要的点,就是程序中重点关注的地方,文档会解释是什么意义

GAMS系列分享22-GAMS高级应用—场景缩减(Scenario Reduction)_第1张图片

2,官网编程实例

  ClearLake.gms    //这个程序  ,这个程序看懂,基本编程就可以了。为了大家容易看懂,对程序作了精简,去除了模型相关的内容。

   当然,secnred.pdf这个文件中,还推荐了另外两个gams,程序,也是不错的(这里不写了,大家看文档找找吧!!!(皮一下还是很开心的。。))

  放一下代码,怎么说呢,按照这个格式去写,就行了。(照葫芦画瓢

   



SET     p       Precipitation levels in each month /low, normal, high/
        t       Time periods /dec,jan,feb,mar,apr/
        baset(t) / dec /
        w       Weather conditions /wet, dry/;
SET     tw(t,w)        relates months to weather conditions /
                (jan,feb).wet
                (mar,apr).dry
                /;

SET     n       nodes / n1 * n121 /;
ALIAS   (n,parent,child);
SET     root(n)        root node / n1 /
        tn(t,n) map nodes to time periods
        anc(child,parent) ancestor mapping
        np(n,p)           maps nodes to precipitation level
        leaf(n);

np(n,p)$[mod(ord(n)-2,card(p)) eq ord(p)-1] = yes;
np(root,p) = no;

display np;

scalar tmp1, tmp2;
tmp1 = 0;
loop {t,
    tmp2 = (power[card(p), ord(t)]) / (card(p)-1);
    tn(t,n)$[ord(n) ge tmp1  and  ord(n) lt tmp2] = yes;
    tmp1 = tmp2;
};
display tn;
anc(child,parent)$[floor((ord(child)+1)/card(p)) eq ord(parent)] = yes;
display anc;
leaf(n)$[ord(n) gt (power[card(p), card(t)-1] - 1) / (card(p)-1)] =  yes;
display leaf;

TABLE  delta(w,p)  Changes in reservoir level for each season
                        low     normal  high
                dry     -50     100     250
                wet     50      150     350     ;

PARAMETER       pr(p)  Probability distribution /
low     0.25,
normal         0.50,
high    0.25
/;

PARAMETER nprob(n)      probability of being at any node;
nprob(root) = 1;
loop {anc(child,parent),
    nprob(child) = sum {np(child,p), pr(p)} * nprob(parent);
};
display nprob;

* ndelta required for current scenRed implementation
PARAMETER ndelta(n)     water delta at each node;
ndelta(n) = sum {(tw(t,w), np(n,p))$[tn(t,n)], delta(w,p)};
display ndelta;



tmp1 = sum {leaf, nprob(leaf)};
abort$[abs(tmp1-1) gt 1e-8] "Error in tree: leaf probabilities do not sum to 1";





SET     nn(n)              nodes in reduced tree
        sanc(child,parent) ancestor mapping for reduced tree
        canc(child,parent) computed ancestor mapping for reduced tree;
PARAMETER snprob(n)        probabilities for reduced tree;


$if set noscenred $goto noscenreduction

* now let's shrink the node set
$libinclude scenred.gms

ScenRedParms('num_leaves') =  sum {leaf, 1};
ScenRedParms('num_random') = 1;
ScenRedParms('num_nodes') = card(n);
ScenRedParms('num_time_steps') = card(t);
* typically, one of the following two parameters is set
ScenRedParms('red_percentage') = 0.5;

* optional SCENRED input parameters: defaults are commented
* ScenRedParms('num_stages') = ScenRedParms('num_time_steps');
* ScenRedParms('reduction_method') = 0;
* ScenRedParms('where_random') = 10;
* ScenRedParms('report_level') = 0;
ScenRedParms('run_time_limit') = 60;

execute_unload 'lakein.gdx',  ScenRedParms, n, anc, nprob, ndelta;
execute 'rm -f lakeout.gdx';
file opts / 'scenred.opt' /;
putclose opts   'log_file =    lakelog.txt'
              / 'input_gdx     lakein.gdx'
              / 'output_gdx =  lakeout.gdx';
execute 'scenred scenred.opt %system.redirlog%';
execute_load   'lakeout.gdx', ScenRedReport, snprob=red_prob,
                              sanc=red_ancestor;
display ScenRedReport;
display snprob;

nn(n) = snprob(n);
display nn;

3,带飞重要知识点

        execute_unload 'lakein.gdx',  ScenRedParms,   n, anc, nprob, ndelta;       

       看懂这句,几乎就成了,就是scenred  需要的输入的一些参数(初学者这个地方可能很迷

                   非常重要。。。其他程序都是围绕这句来写的。。 

     其他程序就是,  对ScenRedParms  赋值

                              n, 节点

                             anc,   节点之间的连接关系,也就是tree

                            nprob,  节点概率

                            ndelta;  节点的值 


好了,原来没有看到过网上有分享,GAMS场景缩减程序的,希望大家能快点入手呦。

 

搜索“GAMS系列分享”,关注“GAMS”在电力系统(综合能源)中的应用。

搜索“GAMS系列分享”,关注“GAMS”在电力系统(综合能源)中的应用。

搜索“GAMS系列分享”,关注“GAMS”在电力系统(综合能源)中的应用。

大家一间三连呦!!!(*...*)

 

 

 

 

 

你可能感兴趣的:(gams场景缩减,GAMS,GAMS基础知识)