Skip to content

Commit 8055aa1

Browse files
committed
training efficiency factors
1 parent 00a5f4b commit 8055aa1

File tree

3 files changed

+69
-17
lines changed

3 files changed

+69
-17
lines changed

lib/training_engine/jumper_training_engine.dart

Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:sj_manager/models/simulation/flow/dynamic_params/jumper_dynamic_params.dart';
22
import 'package:sj_manager/models/simulation/flow/training/jumper_training_config.dart';
33
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
4+
import 'package:sj_manager/models/user_db/psyche/level_of_consciousness_labels.dart';
45
import 'package:sj_manager/training_engine/jumper_training_result.dart';
56
import 'package:sj_manager/utils/random/random.dart';
67

@@ -24,6 +25,8 @@ class JumperTrainingEngine {
2425
late double _formStability;
2526
late double _jumpsConsistency;
2627
late double _fatigue;
28+
late double _efficiencyFactor;
29+
late double _subjectiveEfficiencyFactor;
2730

2831
JumperTrainingResult doTraining() {
2932
_setUp();
@@ -35,6 +38,8 @@ class JumperTrainingEngine {
3538
_simulateJumpsConsistencyTraining();
3639
_simulateFatigue();
3740
_simulateInjuries();
41+
_simulateEfficiencyFactorChange();
42+
_setSubjectiveEfficiencyFactorChange();
3843

3944
final newSkills = jumper.skills.copyWith(
4045
takeoffQuality: _takeoffQuality,
@@ -47,6 +52,7 @@ class JumperTrainingEngine {
4752
formStability: _formStability,
4853
jumpsConsistency: _jumpsConsistency,
4954
fatigue: _fatigue,
55+
efficiencyFactor: _efficiencyFactor,
5056
);
5157
}
5258

@@ -76,14 +82,13 @@ class JumperTrainingEngine {
7682

7783
const potentialRandomForOnePoint = 0.15;
7884

79-
final negativeRandom = linearRandomDouble(0, potentialRandomForOnePoint * 5);
85+
const negativeRandomMax = potentialRandomForOnePoint * 5;
8086
final positiveRandomMax =
8187
(_developmentPotentialFactor * developmentPotentialMultiplier) *
8288
(dynamicParams.trainingEfficiencyFactor * trainingEfficiencyMultiplier) *
8389
(potentialRandomForOnePoint * points);
8490

85-
final positiveRandom = linearRandomDouble(0, positiveRandomMax);
86-
final random = (negativeRandom + positiveRandom) * scaleFactor;
91+
final random = linearRandomDouble(negativeRandomMax, positiveRandomMax) * scaleFactor;
8792

8893
_takeoffQuality += random;
8994
}
@@ -98,14 +103,13 @@ class JumperTrainingEngine {
98103

99104
const potentialRandomForOnePoint = 0.15;
100105

101-
final negativeRandom = linearRandomDouble(0, potentialRandomForOnePoint * 5);
106+
const negativeRandomMax = potentialRandomForOnePoint * 5;
102107
final positiveRandomMax =
103108
(_developmentPotentialFactor * developmentPotentialMultiplier) *
104109
(dynamicParams.trainingEfficiencyFactor * trainingEfficiencyMultiplier) *
105110
(potentialRandomForOnePoint * points);
106111

107-
final positiveRandom = linearRandomDouble(0, positiveRandomMax);
108-
final random = (negativeRandom + positiveRandom) * scaleFactor;
112+
final random = linearRandomDouble(negativeRandomMax, positiveRandomMax) * scaleFactor;
109113

110114
_flightQuality += random;
111115
}
@@ -120,14 +124,13 @@ class JumperTrainingEngine {
120124

121125
const potentialRandomForOnePoint = 0.15;
122126

123-
final negativeRandom = linearRandomDouble(0, potentialRandomForOnePoint * 5);
127+
const negativeRandomMax = potentialRandomForOnePoint * 5;
124128
final positiveRandomMax =
125129
(_developmentPotentialFactor * developmentPotentialMultiplier) *
126130
(dynamicParams.trainingEfficiencyFactor * trainingEfficiencyMultiplier) *
127131
(potentialRandomForOnePoint * points);
128132

129-
final positiveRandom = linearRandomDouble(0, positiveRandomMax);
130-
final random = (negativeRandom + positiveRandom) * scaleFactor;
133+
final random = linearRandomDouble(negativeRandomMax, positiveRandomMax) * scaleFactor;
131134

132135
_landingQuality += random;
133136
}
@@ -143,16 +146,13 @@ class JumperTrainingEngine {
143146
const potentialRandomForOnePoint = 0.15;
144147

145148
const negativeRandomMax = potentialRandomForOnePoint * 5;
146-
final negativeRandom = linearRandomDouble(0, negativeRandomMax);
147149

148150
final positiveRandomMax =
149151
(_developmentPotentialFactor * developmentPotentialMultiplier) *
150152
(dynamicParams.trainingEfficiencyFactor * trainingEfficiencyMultiplier) *
151153
(potentialRandomForOnePoint * formPoints) *
152154
(1.0 / _form);
153-
154-
final positiveRandom = linearRandomDouble(0, positiveRandomMax);
155-
final random = (negativeRandom + positiveRandom) * scaleFactor;
155+
final random = linearRandomDouble(negativeRandomMax, positiveRandomMax) * scaleFactor;
156156

157157
_form += random;
158158
}
@@ -167,15 +167,13 @@ class JumperTrainingEngine {
167167
const potentialRandomForMaxChange = 0.1;
168168

169169
final negativeRandomMax = (_trainingConfig.balance * 0.5);
170-
final negativeRandom = linearRandomDouble(0, negativeRandomMax);
171170

172171
final positiveRandomMax =
173172
(_developmentPotentialFactor * developmentPotentialMultiplier) *
174173
(dynamicParams.trainingEfficiencyFactor * trainingEfficiencyMultiplier) *
175174
(potentialRandomForMaxChange * _trainingConfig.balance);
176-
final positiveRandom = linearRandomDouble(0, positiveRandomMax);
177175

178-
final random = (negativeRandom + positiveRandom) * scaleFactor;
176+
final random = linearRandomDouble(negativeRandomMax, positiveRandomMax) * scaleFactor;
179177

180178
_jumpsConsistency += random;
181179
}
@@ -208,4 +206,56 @@ class JumperTrainingEngine {
208206
void _simulateInjuries() {
209207
// TODO
210208
}
209+
210+
void _simulateEfficiencyFactorChange() {
211+
_efficiencyFactor = dynamicParams.trainingEfficiencyFactor;
212+
final negativeRandomMax = 0.1 + (_trainingConfig.balance / 10);
213+
final positiveRandomMax = 0.1 + (_trainingConfig.balance / 10);
214+
final random = linearRandomDouble(negativeRandomMax, positiveRandomMax);
215+
final delta = random;
216+
_efficiencyFactor += delta;
217+
}
218+
219+
void _setSubjectiveEfficiencyFactorChange() {
220+
var percentsDeviation = switch (dynamicParams.levelOfConsciousness.label) {
221+
LevelOfConsciousnessLabels.shame => 23,
222+
LevelOfConsciousnessLabels.guilt => 22,
223+
LevelOfConsciousnessLabels.apathy => 21,
224+
LevelOfConsciousnessLabels.grief => 20,
225+
LevelOfConsciousnessLabels.fear => 18,
226+
LevelOfConsciousnessLabels.desire => 17,
227+
LevelOfConsciousnessLabels.anger => 16,
228+
LevelOfConsciousnessLabels.pride => 14,
229+
LevelOfConsciousnessLabels.courage => 12,
230+
LevelOfConsciousnessLabels.neutrality => 11,
231+
LevelOfConsciousnessLabels.willingness => 9.5,
232+
LevelOfConsciousnessLabels.acceptance => 8,
233+
LevelOfConsciousnessLabels.reason => 6,
234+
LevelOfConsciousnessLabels.love => 4,
235+
LevelOfConsciousnessLabels.joy => 2,
236+
LevelOfConsciousnessLabels.peace => 1,
237+
LevelOfConsciousnessLabels.enlightenment => 0,
238+
};
239+
240+
var randomMin = percentsDeviation * (1 + (_efficiencyFactor / 6));
241+
var randomMax = percentsDeviation * (1 + (_efficiencyFactor / 6));
242+
243+
/*
244+
Np. subjective 0.45, real 0.6
245+
difference: 0.15
246+
scale = 1 - (0.15 / 0.60) = 0.75
247+
randomMax *= 0.75
248+
*/
249+
var difference = (_subjectiveEfficiencyFactor - _efficiencyFactor).abs();
250+
var scale = 0.8 - (difference / _efficiencyFactor);
251+
if (_subjectiveEfficiencyFactor > _efficiencyFactor) {
252+
randomMax *= (scale.clamp(0, 1)); // Ensure scale does not reduce below 0
253+
} else if (_subjectiveEfficiencyFactor < _efficiencyFactor) {
254+
randomMin *= (scale.clamp(0, 1));
255+
}
256+
257+
final random = linearRandomDouble(randomMin, randomMax) / 100; // from percents
258+
259+
_subjectiveEfficiencyFactor = _efficiencyFactor + random;
260+
}
211261
}

lib/training_engine/jumper_training_result.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ class JumperTrainingResult {
77
required this.formStability,
88
required this.jumpsConsistency,
99
required this.fatigue,
10+
required this.efficiencyFactor,
1011
});
1112

1213
final JumperSkills skills;
1314
final double form;
1415
final double formStability;
1516
final double jumpsConsistency;
1617
final double fatigue;
18+
final double efficiencyFactor;
1719
}

lib/utils/random/random.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:math';
22

3-
double linearRandomDouble(double start, double end) {
3+
double linearRandomDouble(num start, num end) {
44
final random = Random();
55
return start + random.nextDouble() * (end - start);
66
}

0 commit comments

Comments
 (0)