|
|
@@ -2603,6 +2603,11 @@
|
|
|
let me = this;
|
|
|
let G_DIGIT = 0.01; // 系数调整步距(0.1最终结果误差大。0.001目标金额与逼前金额差距大时无法有效逼近)
|
|
|
let times = 100; // 逼近轮数
|
|
|
+
|
|
|
+ let quickModel = false; // 快速模式
|
|
|
+ let qmTimes = 50; // 快速模式下的极限次数
|
|
|
+ let qmValue = 10; // 快速模式下允许的误差值上限
|
|
|
+
|
|
|
let isTest = true; // 测试
|
|
|
|
|
|
// 取树结点的调价系数。
|
|
|
@@ -2613,7 +2618,7 @@
|
|
|
// 取根结点的:调后金额跟目标金额差值,看还有多少误差需要处理。
|
|
|
function getRootDiff() {
|
|
|
let root = tender_obj.tenderTree.roots[0];
|
|
|
- return root.data.feesIndex.common.tenderTotalFee - root.data.targetTotalFee;
|
|
|
+ return (root.data.feesIndex.common.tenderTotalFee - root.data.targetTotalFee).toDecimal(3);
|
|
|
}
|
|
|
|
|
|
// 生成每单位差值的定额结点列表。
|
|
|
@@ -2719,7 +2724,10 @@
|
|
|
|
|
|
// 多轮逼进
|
|
|
for (let i = 1; i <= times; i++) {
|
|
|
- if (d1 == 0) break; // 结果与目标金额完全一致,完美。
|
|
|
+ if (Math.abs(d1) < 1) break; // 误差在1以内,结果与目标金额完全一致,完美。
|
|
|
+ if (quickModel){ // 快速模式:在指定的计算轮数内,能达到指定的差值范围内,也很理想。这个条件用于减少计算轮数,提高效率。
|
|
|
+ if ((Math.abs(d1) < qmValue) && (times > qmTimes)) break;
|
|
|
+ };
|
|
|
let obj = approach(vArr);
|
|
|
if (obj.type == 2) break; // 列表已清空,无结点可调。
|
|
|
if (obj.type == 3) { // 结点过调,该结点任务已完成,不再参与调节,从列表中清除
|