Skip to content

Commit 671cecb

Browse files
committed
Add inexact algorithm: possibly better for some cases.
1 parent 0367f6c commit 671cecb

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

src/models/solve_allocation_by_duality_cgc.jl

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ function hessian_duality_cgc(
129129
graph = auxdata.graph
130130
nodes = graph.nodes
131131
kappa = auxdata.kappa
132+
inexact_algo = param.duality == 2
132133
beta = param.beta
133134
m1dbeta = -1 / beta
134135
sigma = param.sigma
@@ -147,9 +148,12 @@ function hessian_duality_cgc(
147148
# Constant term: first part of Bprime
148149
cons = m1dbeta * n1dnum1 * numbetam1
149150
## Constant in T'
150-
# cons2 = numbetam1 / (numbetam1+nu*beta)
151-
# New: constant in T' -> More accurate!
152-
cons3 = m1dbeta * n1dnum1 * (numbetam1+nu*beta) / (1+beta)
151+
if inexact_algo
152+
cons2 = numbetam1 / (numbetam1+nu*beta)
153+
else
154+
# New: constant in T' -> More accurate!
155+
cons3 = m1dbeta * n1dnum1 * (numbetam1+nu*beta) / (1+beta)
156+
end
153157

154158
# Precompute elements
155159
res = recover_allocation_duality_cgc(x, auxdata)
@@ -203,13 +207,19 @@ function hessian_duality_cgc(
203207
if jd == j
204208
KPprimeAB1 = m1dbeta * Pjn[j, nd]^(-sigma) * PCj[j]^(sigma-1)
205209
term += Qjkn[j, k, n] * (KPprimeAB1 - KPAprimeB1 + KPABprime1) # Derivative of Qjkn
206-
# term += T * (((1+beta) * KPprimeAB1 + cons2 * KPABprime1) * G + Gprime) # T'G + TG'
207-
term += T * ((1+beta) * KPprimeAB1 * G + Gprime) # T'G (first part) + TG'
208-
term += cons3 * Qjkn[j, k, nd] / PCj[j] * G # Second part of T'G
210+
if inexact_algo
211+
term += T * (((1+beta) * KPprimeAB1 + cons2 * KPABprime1) * G + Gprime) # T'G + TG'
212+
else
213+
term += T * ((1+beta) * KPprimeAB1 * G + Gprime) # T'G (first part) + TG'
214+
term += cons3 * Qjkn[j, k, nd] / PCj[j] * G # Second part of T'G
215+
end
209216
elseif jd == k
210217
term += Qjkn[j, k, n] * (KPAprimeB1 - KPABprime1) # Derivative of Qjkn
211-
# term -= T * cons2 * KPABprime1 * G # T'G: second part [B'(k) has opposite sign]
212-
term -= cons3 * Qjkn[j, k, nd] / PCj[j] * G # Second part of T'G
218+
if inexact_algo
219+
term -= T * cons2 * KPABprime1 * G # T'G: second part [B'(k) has opposite sign]
220+
else
221+
term -= cons3 * Qjkn[j, k, nd] / PCj[j] * G # Second part of T'G
222+
end
213223
end
214224
end
215225
if Qjkn[k, j, n] > 0 # Flows in the direction of j

0 commit comments

Comments
 (0)