New model

This commit is contained in:
Ozzie Gooen 2020-02-26 09:16:10 +00:00
parent f2d52e6180
commit 312d90af39
5 changed files with 58 additions and 3 deletions

View File

@ -3,5 +3,6 @@ let make = () => {
<div className="w-full max-w-screen-xl mx-auto px-6">
<FormBuilder.ModelForm model=EAFunds.Interface.model />
<FormBuilder.ModelForm model=GlobalCatastrophe.Interface.model />
<FormBuilder.ModelForm model=Human.Interface.model />
</div>;
};

View File

@ -19,6 +19,7 @@ module DistPlusChart = {
<DistributionPlot
minX
maxX
height=120
?discrete
?continuous
color={`hex("333")}
@ -50,7 +51,7 @@ module IntegralChart = {
<DistributionPlot
minX
maxX
height=100
height=80
?continuous
color={`hex("333")}
timeScale

View File

@ -49,7 +49,7 @@ module ModelForm = {
let make = (~model: Model.t) => {
let formState = makeHelpers(Combo.fromModel(model));
<div>
<form
<div
className="bg-white rounded px-8 pt-6 pb-8 mb-4 mt-6 border-gray-200 border-solid border-2">
<h1 className="text-gray-800 text-xl font-bold">
{model.name |> ReasonReact.string}
@ -82,7 +82,7 @@ module ModelForm = {
{model.run(Prop.Combo.InputValues.toValueArray(formState.combo))
|> E.O.React.fmapOrNull(propValue)}
</div>
</form>
</div>
</div>;
};
};

View File

@ -221,6 +221,21 @@ module TypeWithMetadata = {
~assumptionType=ASSUMPTION,
(),
);
let age =
make(
~id="age",
~name="Current Age",
~description=None,
~type_=
FloatPoint({
default: Some(40.0),
min: Some(0.0),
max: Some(100.0),
}),
~assumptionType=PRIMARY_INPUT,
(),
);
};
module Model = {

38
src/models/Human.re Normal file
View File

@ -0,0 +1,38 @@
let guesstimatorString = age => GuesstimatorDist.normal(80.0 -. age, 2.);
let makeI = (age: float) => {
DistPlusIngredients.make(
~guesstimatorString=guesstimatorString(age),
~unit=TimeDistribution({zero: MomentRe.momentNow(), unit: `years}),
~domain=RightLimited({xPoint: 300.0, excludingProbabilityMass: 0.3}),
(),
);
};
module Model = {
let make = (age: float) => {
Prop.Value.DistPlusIngredients(makeI(age));
};
};
module Interface = {
let ageKey = "age";
let run = (p: array(option(Prop.Value.t))) => {
switch (p) {
| [|Some(FloatPoint(age))|] => Some(Model.make(age))
| _ => None
};
};
let model: Prop.Model.t =
Prop.{
name: "Death Time",
description: "When will you die?",
version: "1.0.0",
author: "Ozzie Gooen",
inputTypes: [|TypeWithMetadata.age|],
outputTypes: [||],
run,
};
};