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.

XlvnsScriptTool - Tool for decompilation and compilation of scripts .SDT from the visual novel's engine xlvns

XlvnsScriptTool English Dual languaged (rus+eng) tool for decompiling and compiling (actually, this tool is more than just (dis)assenbler, but less th

Tester 3 Sep 15, 2022
200 LeetCode problems

LeetCode I classify 200 leetcode problems into some categories and upload my code to who concern WEEK 1 # Title Difficulty Array 15 3Sum Medium 1324 P

Hoang Cao Bao 108 Dec 08, 2022
Grade 8 Version of Space Invaders

Space-Invaders Grade 8 Version of Space Invaders Compatability This program is Python 3 Compatable, and not Python 2 Compatable because i haven't test

Space64 0 Feb 16, 2022
A program that analyzes data from inertia measurement units installeed in aircraft and generates g-exceedance curves

A program that analyzes data from inertia measurement units installeed in aircraft and generates g-exceedance curves

Pooya 1 Nov 23, 2021
This is a repository containing the backend and the frontend of a simple pokédex.

Pokémon This is a repository containing the backend and the frontend of a simple pokédex. This is a work in progress project! Project Structure 🗂 pok

André Rato 1 Nov 28, 2021
Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Aristotle University 5 Jun 28, 2022
This is a database of 180.000+ symbols containing Equities, ETFs, Funds, Indices, Futures, Options, Currencies, Cryptocurrencies and Money Markets.

Finance Database As a private investor, the sheer amount of information that can be found on the internet is rather daunting.

Jeroen Bouma 1.4k Dec 31, 2022
Allows you to purge all reply comments left by a user on a YouTube channel or video.

YouTube Spammer Purge Allows you to purge all reply comments left by a user on a YouTube channel or video. Purpose Recently, there has been a massive

4.3k Jan 09, 2023
Get you an ultimate lexer generator using Fable; port OCaml sedlex to FSharp, Python and more!

NOTE: currently we support interpreted mode and Python source code generation. It's EASY to compile compiled_unit into source code for C#, F# and othe

Taine Zhao 15 Aug 06, 2022
🤡 Multiple Discord selfbot src deobfuscated !

Deobfuscated selfbot sources About. If you whant to add src, please make pull requests. If you whant to deobfuscate src, send mail to

Sreecharan 5 Sep 13, 2021
The only purpose of a byte-sized application is to help you create .desktop entry files for downloaded applications.

Turtle 🐢 The only purpose of a byte-sized application is to help you create .desktop entry files for downloaded applications. As of usual with elemen

TenderOwl 14 Dec 29, 2022
Blender addon, import and update mixamo animation

This is a blender addon for import and update mixamo animations.

ywaby 7 Apr 19, 2022
Files relating to polymtl university

This is a tool I developed quickly, which allows users to visualize class availability by day of the week for a given program at polymtl. The schedule

PN 3 Mar 15, 2022
Artificial intelligence based on 5-dimensional quantum selection

Deep Thought An artificial intelligence based on 5-dimensional quantum selection. Algorithm The payload Make an random bit array (e.g. 1101...) Conver

Larry Holst 3 Dec 14, 2022
A simple BrainF**k compiler written in Python

bf-comp A simple BrainF**k compiler written in Python. What else were you looking for?

1 Jan 09, 2022
Vehicle Identification Speed Detection (VISD) extracts vehicle information like License Plate number, Manufacturer and colour from a video and provides this data in the form of a CSV file

Vehicle Identification Speed Detection (VISD) extracts vehicle information like License Plate number, Manufacturer and colour from a video and provides this data in the form of a CSV file. VISD can a

6 Feb 22, 2022
Blender Addon for Snapping a UV to a specific part of a Tilemap

UVGridSnapper A simple Blender Addon for easier texturing. A menu in the UV editor allows a square UV to be snapped to an Atlas texture, or Tilemap. P

2 Jul 17, 2022
Blender Light Manipulation - A script that makes it easier to work with light

Blender Light Manipulation A script that makes it easier to work with light 1. Wstęp W poniższej dokumentacji przedstawiony zostanie skrypt, który swo

Tomasz 1 Oct 19, 2021
Watcher for systemdrun user scopes

Systemctl Memory Watcher Animated watcher for systemdrun user scopes. Usage Launch some process in your GNU-Linux or compatible OS with systemd-run co

Antonio Vanegas 2 Jan 20, 2022
Node editor view image node

A Blender addon to quickly view images from image nodes in Blender's image viewer.

5 Nov 27, 2022