Skip to content

Instantly share code, notes, and snippets.

@rtkclouds
Created November 22, 2023 05:14
Show Gist options
  • Save rtkclouds/a6ee9afd96461ca94b3e9c22f78bda3a to your computer and use it in GitHub Desktop.
Save rtkclouds/a6ee9afd96461ca94b3e9c22f78bda3a to your computer and use it in GitHub Desktop.
The modified code introduces a grouping concept for evaluating actions based on random data. Initially, random vectors of actions and positions are generated. The data corresponding to these positions are then collected from a predefined window. This data is divided into groups, and the average of each group is calculated. The action to be evalu…
/*
The modified code introduces a grouping concept for evaluating actions based on random data.
Initially, random vectors of actions and positions are generated.
The data corresponding to these positions are then collected from a predefined window.
This data is divided into groups, and the average of each group is calculated.
The action to be evaluated is selected based on the cumulative modular sum of this data.
The action evaluation takes into account the group averages, offering a more nuanced approach compared to a direct evaluation.
The code runs multiple iterations to determine the best action based on this evaluation method
*/
const n = 10; // Number of possible actions
const z = 20; // Size of the window
const s = 5; // Size of the action vector
const k = 3; // Size of the position vector
const g = 2; // Number of groups
// Function to generate a random action vector
function generateRandomActions() {
let actions = [];
for (let i = 0; i < s; i++) {
actions.push(Math.floor(Math.random() * n));
}
return actions;
}
// Function to generate a random positions vector
function generateRandomPositions() {
let positions = [];
for (let i = 0; i < k; i++) {
positions.push(Math.floor(Math.random() * z));
}
return positions;
}
// Function to simulate retrieving data from the window 'z'
function getDataFromWindow(positions) {
// Returns random data for each position
return positions.map(p => Math.random());
}
// Function to calculate the cumulative modular sum
function cumulativeModularSum(data) {
// Sums up the data with each addition being modulo 's'
return data.reduce((acc, val) => (acc + val) % s, 0);
}
// Function to divide data into groups and calculate the average of each group
function calculateGroupAverages(data) {
let groupSize = Math.floor(data.length / g);
let groupAverages = [];
for (let i = 0; i < g; i++) {
// Extracts data for each group and calculates the average
let groupData = data.slice(i * groupSize, (i + 1) * groupSize);
let groupAverage = groupData.reduce((acc, val) => acc + val, 0) / groupData.length;
groupAverages.push(groupAverage);
}
return groupAverages;
}
// Function to evaluate the action (placeholder function)
function evaluateAction(action, groupAverages) {
// Here, more complex evaluation logic can be added
// The current implementation adds up the action value and group averages
return action + groupAverages.reduce((acc, val) => acc + val, 0);
}
let bestScore = -Infinity;
let bestAction = null;
// Main loop running for 100 iterations
for (let i = 0; i < 100; i++) {
let actions = generateRandomActions();
let positions = generateRandomPositions();
let windowData = getDataFromWindow(positions);
let groupAverages = calculateGroupAverages(windowData);
let actionIndex = cumulativeModularSum(windowData);
let action = actions[actionIndex];
let score = evaluateAction(action, groupAverages);
// Updates the best action and score if the current score is better
if (score > bestScore) {
bestScore = score;
bestAction = action;
// Implement 1% adjustment logic here if necessary
}
// Implement reset and 1% randomization logic here if the score is worse
}
console.log(`Best action: ${bestAction} with score: ${bestScore}`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment