simulation = function(){
const numUnits = 60;
const unitSize = 1690;
const monthlyRent = 500;
const plotEntity = {
area: 28660.2228092,
total_gfa: 20621.304291639997,
unitSize: unitSize,
monthlyRent: monthlyRent
}
const existingBuildings = 20;
const existingGFA = plotEntity.total_gfa;
const existingUnitSize = plotEntity.unitSize || unitSize;
const existingUnits = existingGFA/existingUnitSize;
const existingMonthlyRent = plotEntity.monthlyRent || monthlyRent;
const input = {
numUnits: numUnits,
unitSize: unitSize,
requiredGfa: numUnits*unitSize,
monthlyRent: monthlyRent,
existingBuildings: existingBuildings,
existingGfa: existingGFA,
existingUnits: existingUnits,
existingUnitSize: existingUnitSize,
existingMonthlyRent: existingMonthlyRent,
area: plotEntity.area,
};
const rangeDiff = 2
const scenarioBuildingsMin = input.existingBuildings-rangeDiff > 0 ? input.existingBuildings-rangeDiff : 1;
let scenarioBuildings = Math.random() * (input.existingBuildings+rangeDiff - scenarioBuildingsMin) + scenarioBuildingsMin;
if(scenarioBuildings>numUnits){
scenarioBuildings = numUnits
}
const initialCost = (input.existingGfa * investment['Construction costs (hard) $/SF'])+(input.existingGfa*investment['Construction costs (hard) $/SF'])+(input.existingGfa / 3);
const maxFloors = 100;
const minFloors = 2;
let scenarioFloors = Math.random() * (maxFloors- minFloors) + minFloors;
const constraintsSyntax1 = `
editable building.footprint strong
editable floor.units strong
initail.building.footprint == building.footprint
initail.floor.units == floor.units
scenarioBuildings == ${1}
bua == building.footprint * ${1} + plot.parkingFootprint
plot.area == ${input.area} required
plot.parkingFootprint >= ${2.5*5*2*input.numUnits} required
floor.units >=1 required
plot.area >= plot.parkingFootprint + (building.footprint * ${1}) required
floor.units == building.footprint / ${input.unitSize} required
building.footprint >= ${input.unitSize} required
building.footprint >= floor.units * ${input.unitSize} required
`
const constraintsSyntax = constraintsSyntax1;
console.log("constraintsSyntax",constraintsSyntax)
const solution = constraints.default(constraintsSyntax)
solution.suggestValue('building.footprint', input.numUnits * input.unitSize / maxFloors)
solution.suggestValue('floor.units', input.numUnits / maxFloors)
solution.updateVariables()
return solution;
}