SmartGrid - Een poging tot een optimale SmartGrid oplossing, door Dirk Kuiper & Lars Zwaan

Overview

SmartGrid

Een poging tot een optimale SmartGrid oplossing, door Dirk Kuiper (12416657) & Lars Zwaan (12414069). Onderdeel van Programmeertheorie, Minor Programmeren, UvA.

Case

Het probleem is als volgt opgebouwd: er zijn 3 districten, met in elk daarvan 150 huizen en 5 batterijen. Elk van deze huizen moet aan een batterij verbonden worden. Elk huis heeft een output en elke batterij heeft een capaciteit; hierdoor is niet elke combinatie mogelijk. In dit project gaan we op zoek naar een optimale oplossing, waarbij optimaal bestaat uit het verkrijgen van een oplossing met een zo kort mogelijke totale kabellengte. Hierbij mogen huizen die aan dezelfde batterij verbonden zijn kabels delen.

De beste door ons gevonden oplossing is de volgende: SmartGrid - optimale oplossing

Gebruik

Bij het runnen van main.py worden voor elk van de 3 districten een aantal algoritme's aangeroepen. Als eerst worden de huizen in een random volgorde aan batterijen verbonden. Hierna gebeurt deze ordening op volgorde op 2 manieren: kortste naar langste afstand tot dichtstbijzijnde batterij, met 150 configuraties: kortste eerst, op-één-na kortste eerst, enzovoort. Bij de tweede manier van ordenen wordt dit zelfde principe van ordenen niet alleen op de huizen, maar ook op de batterijen toegepast. Dit resulteert in 750 opties. Een uitgebreidere toelichting hierop valt te lezen onder het kopje 'Experiment'

Voor elk van deze 3 districten met elk 3 opties worden 2 figuren opgeslagen: een visuele representatie van de oplossing met de kortste totale kabellengte, en een histogram van de verdeling van de totale kabellengte van elk van de geldige configuraties.

Experiment

In het kader van experiment hebben we nagedacht over verschillende manieren om het algoritme te gebruiken dat huizen over batterijen verdeeld. Naast dat je dit x maal op een willekeurige manier kunt doen en hiermee een deel van de state-space kunt onderzoeken, kan je ook op een meer gestructureerde manier door een deel van de state-space zoeken.

Elk van de 150 huizen kan aan 5 verschillende batterijen verbonden worden, mits de capaciteit dit toelaat. In ons algoritme gaat het vooral om de volgorde waarin dit gebeurd. Dit kun je in verschillende volgordes doen. Wij hebben deze verschillende mogelijkheden onderzocht en vergeleken. Hierin wordt veel gepraat over de afstand tussen een huis en een batterij, die wij berekenen volgens de manhattan distance. Het is echter belangrijk gedurende het lezen te beseffen dat kabels tussen huizen en batterijen gedeeld mogen worden; dit zorgt ervoor dat het verbinden van ieder huis aan de dichtstbijzijnde batterij niet per se optimaal is; een andere volgorde zou door optimaler kabels te delen voordeliger kunnen zijn. Als baseline kun je dit op een willekeurige manier doen. In dit geval verbindt een willekeurig huis eerst aan een willekeurige batterij. Hierna verbindt een willekeurig van de overgebleven 149 huizen aan een willekeurige batterij, mits er capaciteit beschikbaar is, enzovoorts. Als blijkt dat na verloop van tijd er een huis overblijft dat niet meer aan een batterij past vanwege te weinig capaciteit, wordt deze optie afgebroken en begint het proces opnieuw. Dit kun je door laten gaan tot je een x aantal mogelijke configuraties vindt, waarvan wij zowel de configuratie met de kortste totale kabellengte plotten, als de verdeling van de totale kabellengtes van deze configuraties.

De eerste optie naast de baseline is het bepalen van de volgorde van huizen verbinden op basis van de afstand tot de dichtstbijzijnde batterij. Hierbij wordt als eerste het huis met de kortste afstand tot zijn dichtstbijzijnde batterij verbonden aan deze batterij. Vervolgens wordt het huis met de op-één-na kortste afstand tot zijn dichtstbijzijnde batterij verbonden, enzovoort. Als de dichtstbijzijnde batterij van een huis vol is, wordt hij aan de op-één-na dichtstbijzijnde batterij verbonden, of de derde, etc. Dit geheel is de eerste configuratie (let op: dit hoeft niet per se een geldige configuratie qua capaciteit te zijn). De tweede mogelijke configuratie wordt bepaald met een iets andere volgorde: als eerste wordt het huis met de tweede kortste afstand aan de dichtstbijzijnde batterij verbonden, dan de derde, etc, met op het eind de 150ste en als allerlaatste de 1ste. Deze volgordes geïllustreerd met een cijfervoorbeeld, waarbij het nummer staat voor de rangorde van afstand tot de dichtstbijzijnde batterij: 1-2-3-4-5 > 2-3-4-5 > 3-4-5-1-2, etc. Dit geeft dus 150 mogelijke volgordes en dus configuraties, waarvan slechts een deel geldig zal zijn.

De tweede optie is een uitbreiding van de eerste. Hierbij wordt niet alleen de volgorde van de huizen aangepast, maar ook die van de batterijen. Ter illustratie nemen we de eerste geprobeerde volgorde uit optie 1. Hier wordt gestart met het huis met de kortste afstand tot de dichtstbijzijnde batterij, etc, maar ieder van deze huizen probeert altijd eerst aan zijn dichtstbijzijnde batterij te verbinden. In deze tweede optie worden ook de andere volgordes (batterij 2 - 3- 4- 5 - 1, bijvoorbeeld) geprobeerd. Dit geeft in totaal 750 mogelijk geldige configuraties.

Uit deze resultaten valt af te leiden dat het toevoegen van configuraties waarbij niet éérst wordt geprobeerd te verbinden aan de dichtstbijzijnde batterij, geen kortere oplossing geven. Dit is de reden dat wij andere volgordes niet hebben onderzocht, zoals volgordes als bijvoorbeeld 3-1-4-2-5, waarbij de nummers niet opeenvolgend hoeven te zijn.

Check50

Deze opdracht wordt normaal gesproken automatisch gecontroleerd met check50. Helaas komt onze oplossing hier niet doorheen; ons programma telt de gedeelde kabels op een andere manier dan dat check50 dat doet. Dit is een definitie-kwestie die in de opdracht niet wordt gespecificeerd: worden niet-gedeelde kabels op het zelfde gridsegment enkel of dubbel meegeteld? Dit lijkt zo in het voorbeeld output.json bestand en uit de code in het check50-bestand. Na overleg met vakassistentie is besloten dit verder niet te veranderen: onze methode werkt, aan de hand van onze definities. Het belangrijkste verschil is dat kabels die over hetzelfde stuk grid lopen, maar niet gedeeld zijn omdat ze naar verschillende batterijen lopen, ook niet als gedeeld worden geteld. Aangezien het voornamelijk gaat om de vergelijking tussen de resultaten, is dit verder ook niet van cruciaal belang.

Advanced Developing of Python Apps Final Exercise

Advanced-Developing-of-Python-Apps-Final-Exercise This is an exercise that I did for a python advanced learning course. The exercise is divided into t

Alejandro Méndez Fernández 1 Dec 04, 2021
This is a survey of python's async concurrency features by example.

Survey of Python's Async Features This is a survey of python's async concurrency features by example. The purpose of this survey is to demonstrate tha

Tyler Lovely 4 Feb 10, 2022
A simple tool made in Python language

Simple tool Uma simples ferramenta feita 100% em linguagem Python 💻 Requisitos: Python3 instalado em seu dispositivo Clonagem e acesso 📳 git clone h

josh washington 4 Dec 07, 2021
Script to calculate delegator epoch returns for all pillars

znn_delegator_calculator Script to calculate estimated delegator epoch returns for all Pillars, so you can delegate to the best one. You can find me o

2 Dec 03, 2021
CaskDB is a disk-based, embedded, persistent, key-value store based on the Riak's bitcask paper, written in Python.

CaskDB - Disk based Log Structured Hash Table Store CaskDB is a disk-based, embedded, persistent, key-value store based on the Riak's bitcask paper, w

886 Dec 27, 2022
An extension module to make reaction based menus with disnake

disnake-ext-menus An experimental extension menu that makes working with reaction menus a bit easier. Installing python -m pip install -U disnake-ext-

1 Nov 25, 2021
Convert Roman numerals to modern numerals and vice-versa

Roman Numeral Conversion Utilities This is a utility module for converting from and to Roman numerals. It supports numbers upto 3,999,999, using the v

Fictive Kin 1 Dec 17, 2021
Sentiment Based Product Recommendation System

Sentiment Based Product Recommendation System The e-commerce business is quite p

Sumit Sahay 2 Jan 15, 2022
The ldapconsole script allows you to perform custom LDAP requests to a Windows domain

ldapconsole The ldapconsole script allows you to perform custom LDAP requests to a Windows domain. Features Authenticate with password Authenticate wi

Podalirius 38 Dec 09, 2022
Would upload anything I do with/related to brainfuck

My Brainfu*k Repo Basically wanted to create something with Brainfu*k but realized that with the smol brain I have, I need to see the cell values real

Rafeed 1 Mar 22, 2022
To attract customers, the hotel chain has added to its website the ability to book a room without prepayment

To attract customers, the hotel chain has added to its website the ability to book a room without prepayment. We need to predict whether the customer is going to reject the booking or not. Since in c

Taychinov Evgeniy 0 Aug 04, 2022
Multi-Probe Attention for Semantic Indexing

Multi-Probe Attention for Semantic Indexing About This project is developed for the topic of COVID-19 semantic indexing. Directories & files A. The di

Jinghang Gu 1 Dec 18, 2022
PressurePlate is a multi-agent environment that requires agents to cooperate during the traversal of a gridworld.

PressurePlate is a multi-agent environment that requires agents to cooperate during the traversal of a gridworld. The grid is partitioned into several rooms, and each room contains a plate and a clos

Autonomous Agents Research Group (University of Edinburgh) 6 Dec 03, 2022
Myrepo - A tool to create your own Arch Linux repository

myrepo A (experimental) tool to create your own Arch Linux repository Example We

Anton Hvornum 5 Feb 19, 2022
Medical appointments No-Show classifier

Medical Appointments No-shows Why do 20% of patients miss their scheduled appointments? A person makes a doctor appointment, receives all the instruct

4 Apr 20, 2022
Python library for generating CycloneDX SBOMs

Python Library for generating CycloneDX This CycloneDX module for Python can generate valid CycloneDX bill-of-material document containing an aggregat

CycloneDX SBOM Standard 31 Dec 16, 2022
NASH 2021 project... this may or may not end up working 🤷‍♂️

wavespace synthesiser this is my NASH 2021 project, which may or may not end up working 🤷‍♂️ what is going on? imagine you have a big folder of audio

Ben Hayes 12 May 17, 2022
Exploiting Linksys WRT54G using a vulnerability I found.

Exploiting Linksys WRT54G Exploit # Install the requirements. pip install -r requirements.txt ROUTER_HOST=192.169.1.1 ROUTER_USERNAME=admin ROUTER_P

Elon Gliksberg 31 May 29, 2022
Blender Add-on That Provides Quick Access to Render Controls

Blender Render Buttons Blender Add-on That Provides Quick Access to Render Controls A Blender 3.0 compatablity update of Blender2.8x-RenderButton v0.0

Don Schnitzius 3 Oct 18, 2022
CalHacks 8 Repo: Megha Jain, Gaurav Bhatnagar, Howard Meng, Vibha Tantry

CalHacks8 CalHacks 8 Repo: Megha Jain, Gaurav Bhatnagar, Howard Meng, Vibha Tantry Setup FE Install React Native via Expo, run App.js. Backend Create

0 Aug 20, 2022