Skip to content

Commit 4b2b5d0

Browse files
committed
fix BactrianDeltaExchangeOperator #1199
1 parent ba76904 commit 4b2b5d0

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

src/beast/base/inference/operator/kernel/BactrianDeltaExchangeOperator.java

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -199,19 +199,27 @@ public final double proposal() {
199199

200200
// exchange a random delta
201201
final double d = getNextDouble(0);
202-
scalar1 -= d;
202+
// scalar1 -= d;
203203
// if (parameterWeights[dim1] != parameterWeights[dim2]) {
204204
// scalar2 += d * parameterWeights[dim1] / parameterWeights[dim2];
205205
// } else {
206206
// scalar2 += d;
207207
// }
208-
209-
210-
double w1 = parameterWeights[dim1];
211-
double w2 = parameterWeights[dim2];
212-
double wsum = w1 + w2;
213-
scalar1 = scalar1 + d*w2/wsum;
214-
scalar2 = scalar2 - d*w1/wsum;
208+
209+
if (parameterWeights[dim1] != parameterWeights[dim2]) {
210+
final double sumW = parameterWeights[dim1] + parameterWeights[dim2];
211+
scalar1 -= d * parameterWeights[dim2] / sumW;
212+
scalar2 += d * parameterWeights[dim1] / sumW;
213+
} else {
214+
scalar1 -= d / 2; // for equal weights
215+
scalar2 += d / 2;
216+
}
217+
218+
// double w1 = parameterWeights[dim1];
219+
// double w2 = parameterWeights[dim2];
220+
// double wsum = w1 + w2;
221+
// scalar1 = scalar1 + d*w2/wsum;
222+
// scalar2 = scalar2 - d*w1/wsum;
215223

216224

217225

@@ -269,12 +277,21 @@ public final double proposal() {
269277
// } else {
270278
// scalar2 += d;
271279
// }
272-
273-
double w1 = parameterWeights[dim1];
274-
double w2 = parameterWeights[dim2];
275-
double wsum = w1 + w2;
276-
scalar1 = scalar1 + d*w2/wsum;
277-
scalar2 = scalar2 - d*w1/wsum;
280+
281+
if (parameterWeights[dim1] != parameterWeights[dim2]) {
282+
final double sumW = parameterWeights[dim1] + parameterWeights[dim2];
283+
scalar1 -= d * parameterWeights[dim2] / sumW;
284+
scalar2 += d * parameterWeights[dim1] / sumW;
285+
} else {
286+
scalar1 -= d / 2; // for equal weights
287+
scalar2 += d / 2;
288+
}
289+
290+
// double w1 = parameterWeights[dim1];
291+
// double w2 = parameterWeights[dim2];
292+
// double wsum = w1 + w2;
293+
// scalar1 = scalar1 + d*w2/wsum;
294+
// scalar2 = scalar2 - d*w1/wsum;
278295

279296
}
280297

0 commit comments

Comments
 (0)