Skip to content

Commit 4914b93

Browse files
committed
More parsimonious.
1 parent 8bc309f commit 4914b93

1 file changed

Lines changed: 16 additions & 52 deletions

File tree

src/models/solve_allocation_by_duality_cgc.jl

Lines changed: 16 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ function solve_allocation_by_duality_cgc(x0, auxdata, verbose=true)
5353

5454
# Set Ipopt options
5555
Ipopt.AddIpoptStrOption(prob, "hessian_approximation", "exact")
56-
Ipopt.AddIpoptIntOption(prob, "max_iter", 1000)
56+
Ipopt.AddIpoptIntOption(prob, "max_iter", 3000)
5757
Ipopt.AddIpoptIntOption(prob, "print_level", verbose ? 5 : 0)
5858

5959
if haskey(param, :optimizer_attr)
@@ -193,65 +193,29 @@ function hessian_duality_cgc(
193193

194194
# Now terms sum_k(Q^n_{jk} - Q^n_{kj}) as well as T'G + TG'
195195
for k in neighbors
196-
diff = Pjn[k, n] - Pjn[j, n]
197-
if diff >= 0 # Flows in the direction of k
198-
tmp = Qjkn[j, k, n]
196+
if Qjkn[j, k, n] > 0 # Flows in the direction of k
199197
T = Qjk[j, k]^(1 + beta) / kappa[j, k]
200198
PK0 = PCj[j] * (1 + beta) / kappa[j, k]
201-
diffnd = Pjn[k, nd] - Pjn[j, nd]
202-
if diffnd > 0
203-
KPABprimemQjkn = cons * (diffnd/m[nd])^n1dnum1 * (PK0 * Qjk[j, k]^beta)^(-nu*n1dnum1)
204-
if !isfinite(KPABprimemQjkn)
205-
KPABprimemQjkn = 0
206-
end
207-
end
199+
KPABprime1 = cons * ((Pjn[k, nd] - Pjn[j, nd])/m[nd])^n1dnum1 * (PK0 * Qjk[j, k]^beta)^(-nu*n1dnum1)
200+
KPAprimeB1 = nd == n ? n1dnum1 / (Pjn[k, n] - Pjn[j, n]) : 0.0
208201
if jd == j
209-
KPprimeABmQjkn = m1dbeta * Pjn[j, nd]^(-sigma) * PCj[j]^(sigma-1)
210-
term += tmp * KPprimeABmQjkn # KP'AB
211-
if nd == n && diff > 0
212-
term -= tmp * n1dnum1 / diff # KPA'B
213-
end
214-
if diffnd > 0
215-
term += tmp * KPABprimemQjkn # KPAB'
216-
term += T * cons2 * KPABprimemQjkn * G # T'G: second part
217-
end
218-
term += T * (1+beta) * KPprimeABmQjkn * G # T'G: first part
219-
term += T * Gprime # TG'
202+
KPprimeAB1 = m1dbeta * Pjn[j, nd]^(-sigma) * PCj[j]^(sigma-1)
203+
term += Qjkn[j, k, n] * (KPprimeAB1 - KPAprimeB1 + KPABprime1) # Derivative of Qjkn
204+
term += T * (((1+beta) * KPprimeAB1 + cons2 * KPABprime1) * G + Gprime) # T'G + TG'
220205
elseif jd == k
221-
if nd == n && diff > 0
222-
term += tmp * n1dnum1 / diff # KPA'B [A'(k) has opposite sign]
223-
end
224-
if diffnd > 0
225-
term -= tmp * KPABprimemQjkn # KPAB' [B'(k) has opposite sign]
226-
term -= T * cons2 * KPABprimemQjkn * G # T'G: second part [B'(k) has opposite sign]
227-
end
206+
term += Qjkn[j, k, n] * (KPAprimeB1 - KPABprime1) # Derivative of Qjkn
207+
term -= T * cons2 * KPABprime1 * G # Old T'G: second part [B'(k) has opposite sign]
228208
end
229-
else # Flows in the direction of j
230-
tmp = Qjkn[k, j, n]
209+
end
210+
if Qjkn[k, j, n] > 0 # Flows in the direction of j
231211
PK0 = PCj[k] * (1 + beta) / kappa[k, j]
232-
diffnd = Pjn[j, nd] - Pjn[k, nd]
233-
if diffnd > 0
234-
KPABprimemQjkn = cons * (diffnd/m[nd])^n1dnum1 * (PK0 * Qjk[k, j]^beta)^(-nu*n1dnum1)
235-
if !isfinite(KPABprimemQjkn)
236-
KPABprimemQjkn = 0
237-
end
238-
end
212+
KPABprime1 = cons * ((Pjn[j, nd] - Pjn[k, nd])/m[nd])^n1dnum1 * (PK0 * Qjk[k, j]^beta)^(-nu*n1dnum1)
213+
KPAprimeB1 = nd == n ? n1dnum1 / (Pjn[j, n] - Pjn[k, n]) : 0.0
239214
if jd == k
240-
KPprimeABmQjkn = m1dbeta * Pjn[k, nd]^(-sigma) * PCj[k]^(sigma-1)
241-
term -= tmp * KPprimeABmQjkn # KP'AB
242-
if nd == n && diff < 0
243-
term += tmp * n1dnum1 / abs(diff) # KPA'B
244-
end
245-
if diffnd > 0
246-
term -= tmp * KPABprimemQjkn # KPAB'
247-
end
215+
KPprimeAB1 = m1dbeta * Pjn[k, nd]^(-sigma) * PCj[k]^(sigma-1)
216+
term -= Qjkn[k, j, n] * (KPprimeAB1 - KPAprimeB1 + KPABprime1) # Derivative of Qjkn
248217
elseif jd == j
249-
if nd == n && diff < 0
250-
term -= tmp * n1dnum1 / abs(diff) # KPA'B [Akj'(j) has opposite sign]
251-
end
252-
if diffnd > 0
253-
term += tmp * KPABprimemQjkn # KPAB' [Bkj'(j) has opposite sign]
254-
end
218+
term -= Qjkn[k, j, n] * (KPAprimeB1 - KPABprime1) # Derivative of Qjkn
255219
end
256220
end
257221
end # End of k loop

0 commit comments

Comments
 (0)