node-red-contrib-genetic-charging-strategy
Version:
A module for Node-RED that adds a battery charging strategy to node-red-contrib-power-saver. It uses genetic algorithms to find the best schedule
36 lines (35 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.populationFunction = void 0;
const utils_1 = require("./utils");
const schedule_1 = require("./schedule");
const populationFunction = (props) => {
const { totalDuration, populationSize, numberOfPricePeriods, excessPvEnergyUse } = props;
const population = [];
for (let i = 0; i < populationSize; i += 1) {
const timePeriods = new schedule_1.DoublyLinkedList();
const activities = [];
let currentNumberOfPricePeriods = 0;
let previousActivity = undefined;
while (currentNumberOfPricePeriods < numberOfPricePeriods) {
const activity = (0, utils_1.generateRandomActivity)(previousActivity);
currentNumberOfPricePeriods += activity != 0 ? 1 : 0;
activities.push(activity);
previousActivity = activity;
}
const startTimes = new Set();
startTimes.add(0);
while (startTimes.size < activities.length) {
startTimes.add(Math.floor(Math.random() * totalDuration));
}
Array.from(startTimes)
.sort((a, b) => a - b)
.forEach((start, i) => timePeriods.insertBack({ start, activity: activities[i] }));
population.push({
periods: timePeriods,
excessPvEnergyUse,
});
}
return population;
};
exports.populationFunction = populationFunction;