* Core model set p /p1*p3/; set j /j1*j20/; Scalar pc_slot /500/; Scalar pc_sc /50/; scalar sc_len /5/; set vnfs /v1*v5/; set sc_num /1*10/; table sfc(sc_num,vnfs) v1 v2 v3 v4 v5 1 1 2 9 4 5 2 6 2 5 3 1 3 1 9 8 3 2 4 2 3 4 5 6 5 4 7 5 3 6 6 3 8 6 4 9 7 1 5 7 2 8 8 7 5 9 8 4 9 6 7 3 1 9 10 7 2 9 8 6 ; display sfc ; set tra /tr1*tr20/ ; set var /bw, sfc/ ; parameter traffic_bw(tra) traffic_sc(tra) table traffic(tra,var) bw sfc tr1 1 6 tr2 8 7 tr3 5 5 tr4 9 3 tr5 8 6 tr6 4 5 tr7 10 5 tr8 4 7 tr9 7 1 tr10 1 3 tr11 10 6 tr12 2 8 tr13 7 10 tr14 6 2 tr15 6 9 tr16 5 2 tr17 2 8 tr18 8 8 tr19 5 9 tr20 2 1; traffic_bw(tra) = traffic(tra,"bw"); Variables phi(sc_num,p); binary Variables phi(sc_num,p) ; Free Variable total_sc_count ; equations total_sc "total instantiated SCs" * sc_capacity(sc_num,p) "SC capacity constraint" * slot_capacity(j,sl) "capacity constraint for a slot" sc_availability1 "SC availability constraint" sc_availability2 "SC availability constraint" ; total_sc.. total_sc_count =e= sum(sc_num,sum(p,phi(sc_num,p))); sc_availability1.. sum(sc_num,sum(p,phi(sc_num,p)))- (sum(tra,traffic_bw(tra))/pc_sc) =l= 1 ; sc_availability2.. sum(sc_num,sum(p,phi(sc_num,p)))- (sum(tra,traffic_bw(tra))/pc_sc) =g= 0 ; Model NFV /all/; * EMP Annotations File emp / '%emp.info%' /; put emp '* problem %gams.i%'/; *emp.nd=2; loop(tra, put / 'randvar' traffic_bw(tra) 'poisson' 10) $onput stage 2 traffic_bw traffic_sc phi sc_availability1 sc_availability2 $offput putclose emp; *dictionary Set scen scenarios / s1*s6 /; parameter scen_traffic_bw(scen,tra); Set dict / scen .scenario.'' traffic_bw .randvar .scen_traffic_bw /; option emp=lindo; solve NFV using emp min total_sc_count scenario dict; display scen_traffic_bw;