tweak: Build Danger.dmr skeleton more
This commit is contained in:
parent
be4e1b1a85
commit
b13da70c38
|
@ -173,7 +173,7 @@ module Internals = {
|
||||||
}
|
}
|
||||||
type diminishingReturnsAccumulatorInner = {
|
type diminishingReturnsAccumulatorInner = {
|
||||||
optimalAllocations: array<float>,
|
optimalAllocations: array<float>,
|
||||||
currentMarginalReturns: array<result<float, string>>,
|
currentMarginalReturns: result<array<float>, string>,
|
||||||
}
|
}
|
||||||
type diminishingReturnsAccumulator = result<diminishingReturnsAccumulatorInner, string>
|
type diminishingReturnsAccumulator = result<diminishingReturnsAccumulatorInner, string>
|
||||||
let diminishingMarginalReturnsSkeleton = (
|
let diminishingMarginalReturnsSkeleton = (
|
||||||
|
@ -214,18 +214,55 @@ module Internals = {
|
||||||
let increment = funds /. numDivisions
|
let increment = funds /. numDivisions
|
||||||
let arrayOfIncrements = Belt.Array.makeBy(numDivisionsInt, _ => increment)
|
let arrayOfIncrements = Belt.Array.makeBy(numDivisionsInt, _ => increment)
|
||||||
|
|
||||||
|
let findBiggestMarginalReturnsIndex = (_) => 0
|
||||||
let initAccumulator: diminishingReturnsAccumulator = Ok({
|
let initAccumulator: diminishingReturnsAccumulator = Ok({
|
||||||
optimalAllocations: [0.0, 0.0],
|
optimalAllocations: [0.0, 0.0],
|
||||||
currentMarginalReturns: [
|
currentMarginalReturns: E.A.R.firstErrorOrOpen([
|
||||||
applyFunctionAtFloatToFloatOption(lambda1, 0.0),
|
applyFunctionAtFloatToFloatOption(lambda1, 0.0),
|
||||||
applyFunctionAtFloatToFloatOption(lambda2, 0.0),
|
applyFunctionAtFloatToFloatOption(lambda2, 0.0),
|
||||||
],
|
]),
|
||||||
})
|
})
|
||||||
let optimalAllocationEndAccumulator = E.A.reduce(arrayOfIncrements, initAccumulator, (
|
let optimalAllocationEndAccumulator = E.A.reduce(arrayOfIncrements, initAccumulator, (
|
||||||
acc,
|
acc,
|
||||||
new,
|
newIncrement,
|
||||||
) => {
|
) => {
|
||||||
|
switch(acc){
|
||||||
|
| Ok(accInner) => {
|
||||||
|
let currentMarginalReturnsWrapped = accInner.currentMarginalReturns
|
||||||
|
let newAccWrapped = switch(currentMarginalReturnsWrapped){
|
||||||
|
| Ok(currentMarginalReturns) => {
|
||||||
|
let biggestMarginalReturnsIndex = findBiggestMarginalReturnsIndex(currentMarginalReturns)
|
||||||
|
let newOptimalAllocations = Belt.Array.copy(accInner.optimalAllocations)
|
||||||
|
let newOptimalAllocationsi =
|
||||||
|
newOptimalAllocations[biggestMarginalReturnsIndex] +. newIncrement
|
||||||
|
newOptimalAllocations[biggestMarginalReturnsIndex] = newOptimalAllocationsi
|
||||||
|
let lambdai = biggestMarginalReturnsIndex == 0 ? lambda1: lambda2 // to do: generalize
|
||||||
|
let newMarginalResultsLambdai = applyFunctionAtFloatToFloatOption(lambdai, newOptimalAllocationsi)
|
||||||
|
let newCurrentMarginalReturns = switch(newMarginalResultsLambdai){
|
||||||
|
| Ok(value) => {
|
||||||
|
let result = Belt.Array.copy(currentMarginalReturns)
|
||||||
|
result[biggestMarginalReturnsIndex] = value
|
||||||
|
Ok(result)
|
||||||
|
}
|
||||||
|
| Error(b) => Error(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
let newAcc: diminishingReturnsAccumulatorInner = {
|
||||||
|
optimalAllocations: newOptimalAllocations,
|
||||||
|
currentMarginalReturns: newCurrentMarginalReturns
|
||||||
|
}
|
||||||
|
Ok(newAcc)
|
||||||
|
}
|
||||||
|
| Error(b) => Error(b)
|
||||||
|
}
|
||||||
|
newAccWrapped
|
||||||
|
}
|
||||||
|
| Error(b) => Error(b)
|
||||||
|
}
|
||||||
|
/*let findSmaller = (_) => 0
|
||||||
|
let smallerDMR =
|
||||||
acc
|
acc
|
||||||
|
*/
|
||||||
})
|
})
|
||||||
let optimalAllocationResult = switch optimalAllocationEndAccumulator {
|
let optimalAllocationResult = switch optimalAllocationEndAccumulator {
|
||||||
| Ok(inner) => Ok(castArrayOfFloatsToInternalArrayOfInternals(inner.optimalAllocations))
|
| Ok(inner) => Ok(castArrayOfFloatsToInternalArrayOfInternals(inner.optimalAllocations))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user