-------- Forwarded Message -------- From: Sina Burkhardt <[email protected]> To: 'Andrew Makhorin' <[email protected]> Subject: AW: [Fwd: Re: [Help-glpk] [Fwd: How to rewrite a nonlinear expression in a linear one]] Date: Tue, 2 Apr 2013 10:51:13 +0200
Hi Jeff, thanks for your answer. You're right. The idea is to use this SIR type of model as a small part in another model which is a linear one. Is there another tool like MathProg that I can use for? The problem is that I must get a solution of my model until Friday, so in the next 3 days, to do some analysis on it and so on. Regards, Sina -----Ursprüngliche Nachricht----- Von: Andrew Makhorin [mailto:[email protected]] Gesendet: Dienstag, 2. April 2013 01:34 An: Sina Burkhardt Betreff: [Fwd: Re: [Help-glpk] [Fwd: How to rewrite a nonlinear expression in a linear one]] -------- Forwarded Message -------- From: Jeffrey Kantor <[email protected]> To: Andrew Makhorin <[email protected]> Cc: GLPK <[email protected]> Subject: Re: [Help-glpk] [Fwd: How to rewrite a nonlinear expression in a linear one] Date: Mon, 1 Apr 2013 18:47:28 -0400 Hi Sina, This looks like a compartmental SIR type of model with multiple contagions. These models are inherently nonlinear because of the denominator in the term you indicated was a problem, and additional terms for infection rate, etc. I'm afraid there's not much you can do if you're looking for a global linearization without imposing some pretty rigid controllers in place which force linearization. You could obtain a local linearization valid in the neighborhood of a steady state. That might be useful if you're eventually looking for optimal control policies. You could also create a convex outer approximation for the dynamics, but I'm not sure how helpful that would be for this problem. So if what you're looking for is a global linearization of this inherently nonlinear model, I'm afraid MathProg may not be the right tool for the job. Jeff On Mon, Apr 1, 2013 at 6:04 PM, Andrew Makhorin <[email protected]> wrote: -------- Forwarded Message -------- From: Sina Burkhardt <[email protected]> To: [email protected] Subject: How to rewrite a nonlinear expression in a linear one Date: Mon, 1 Apr 2013 23:31:16 +0200 Hi all, I’m currently writing my Master thesis and I hope someone can help me to solve the following problem(s) with my model as quickly as possible. I use glpk(gusek) and my model needs unfortunately two nonlinear expressions. Is there any possibility to rewrite these nonlinear expressions into linear ones to solve it with gusek? Or can I assign a solution value of var to an parameter or something like that to avoid the nonlinear type? Here’s an abstract of the model : (the “problems” are red labeled) ###Declarations#### param T, integer; #horizont of time set D; # DemandPoints /*Periodenzeitraum*/ set P, default{1..T}; # Planungshorizont T var susceptible{j in D,t in 0..T}>=0,integer; var N{j in D,t in 0..T}>=0,integer; # Population at DemandPoint j in periode t var I{j in D,t in 0..T}>=0; # Persons who are infected at DemandPoint j in periode t var I_nB{j in D,t in 0..T}>=0,integer #Infected without treatment at DemandPoint j in periode t var I_neu{j in D,t in P}>=0; # add. infected persons in j in t var lambda{j in D,t in P}>=0; #Infectionrate /*Index of contagions*/ param c, >=0,<=1; /*contactrate*/ param kappa{D}; param beta{j in D}:=kappa[j]*c; /*Init. in t=0*/ init_Population{j in D}: N[j,0]=init_N0[j]; init_Infiziert{j in D}: I[j,0]=init_I0[j]; init_Gesund{j in D}: susceptible[j,0]=N[j,0]-I[j,0]; population{j in D,t in P}: N[j,t]=susceptible[j,t]+I[j,t]; #with var I{j in D,t in P} Gesunde{j in D,t in P}: susceptible[j,t]= susceptible[j,t-1]- I_neu[j,t]; #Calculate infectionrate s.t. infekt_rate{j in D,t in P}: lambda[j,t]=beta[j]* (I_nB[j,t-1] /N[j,t-1]); #Here’s the first Problem because its nonlinear and glpk can not solve NLP. #Calculate the new infected persons Neuinfiziert{j in D,t in P}: I_neu[j,t]= lambda[j,t]*susceptible[j,t-1]; # example data data; set D:= D1; param T:=3; param c:=0.2; param kappa:= D1 10; param init_N0:= D1 100000; param init_I0:= D1 1000; end; I would be very happy about your help. Thanks in advance. Regards, Sina _______________________________________________ Help-glpk mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-glpk _______________________________________________ Help-glpk mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-glpk
