Pie de Boer

Pie de Boer

Software Developer, Tech Nerd

I like computers... 🤓

Packing Problem: 2D and 3D Packing 📦

September 2021 - January 2022

Cargo Ship

Packing problems are critical in operations research. Companies can significantly reduce costs by using packing strategies generated by our algorithms as starting points.

Pentris Algorithm

We developed 2D packing algorithms in the form of Pentris. Initially, we used brute-force methods but later advanced to genetic algorithms where fitness was determined by both the pentomino to pack and the existing shape of the arrangement.

3D Packing GUI

We implemented genetic algorithms, greedy algorithms, and dancing links to efficiently pack 3D containers. The GUI for this project was built using JavaFX.

Developed algorithms from scratch to efficiently pack 2D and 3D packages into containers. Initially built a Tetris-style solver, which was later expanded to include more complex 3D packing solutions. This project served as an excellent exploration of greedy and genetic algorithms, as well as Donald Knuth’s "Dancing Links," which can also be used for solving problems like the exact cover problem and Sudoku. The GUI was implemented in both Swing and JavaFX.

Technologies Utilized:

Java Logo Java
JavaFX Logo JavaFX

Project Demonstrations

In this video, the brute-force bot is shown in action. It clearly lacks strategic planning, resulting in quick game over scenarios.
This video demonstrates how the genetic algorithm outperforms the brute-force bot by optimizing fitness. Key factors considered include the height of the board, the number of locked empty squares, and the lateral bumpiness of the columns. Fine-tuning these features significantly improves the bot’s performance.

This project evolved into a JavaFX application with backend algorithms that simulate the packaging of 3D items. These items are prioritized based on their weight and value, which is analogous to the classic knapsack problem.

This video shows the application of the greedy algorithm to pack irregularly shaped boxes into containers. By incorporating more factors with appropriate weights, the packing efficiency improves significantly. These factors include empty space, proximity to walls, and gaps between items, all of which contribute to more optimized packing strategies.

Dice Chess 🎲

September 2022 - June 2023

Dice Chess

Dice Chess is a variant of traditional chess that incorporates a six-sided die, introducing an element of randomness to the game.

Search Tree in Chess

Due to the stochastic nature of Dice Chess, the search tree depth cannot be fully anticipated beyond the immediate move, unlike in traditional chess.

Deep Q-Learning in Chess

We leveraged a MySQL database containing encoded game states (FEN) to train a neural network that predicts win probabilities for specific game positions.

In this project, I developed a learning agent for Dice Chess, where the introduction of a die determines available moves and introduces an element of unpredictability. The self-play data from the best agent was stored in a MySQL database using JDBC. While grandmaster-level games are ideal for training, they were difficult to find for this variant of chess.

The neural network was employed in two distinct contexts: as a Q-function approximation in a Q-learning agent to evaluate which moves offer the highest win probability, and as a value network in Monte Carlo Tree Search (MCTS) to compute the expected cumulative score for a given game state.

Technologies Utilized:

Java Logo Java
MySQL Logo MySQL
Gradle Logo Gradle
Deep4J Logo Deep4J

Project Demonstrations

A demonstration showcasing two AI agents: one based on Monte Carlo Tree Search and the other using ExpectiMiniMax play strategies.

3D Golf Simulator ⛳️

Feb 2022 - Jun 2022

Putting

In this game, we developed agents that allowed 'putting' the golf ball into a hole, on a diverse terrain, including trees, hills, and potential walls.

Forces on Sphere

We developed a physics engine from scratch, based on Euler and Runge Kutta, with RK4 showing the best performance.

Particle Swarm Optimization

Different optimization algorithms were implemented to find the best 'parameters' like force and angle to hit the ball. These included PSO and Simulated Annealing.

In this project, I developed the physics engine from scratch, initially relying on Euler's method but later advancing to Runge-Kutta 4 (RK4). The "putting" algorithms implemented were Simulated Annealing (SA) and Particle Swarm Optimization (PSO). The GUI was programmed in LibGDX, where the terrain was generated using a height function \( f(x, y) \), and additional objects like sandpits, trees, and walls were added to increase difficulty for the agents.

Technologies Utilized:

Java Logo Java
Gradle Logo Gradle
LibGDX Logo LibGDX

Project Demonstrations

This video displays the main menu, allowing the player to select a level, followed by gameplay where the player shoots the ball (not an agent).
The PSO agent successfully sinks the ball into the hole in two shots. Notably, the first shot is particularly impressive, despite the bumpiness of the course.
The PSO agent can even navigate a maze-like terrain with actual walls, with each shot bringing the ball closer to the hole.
Stock ChatBot GUI ChatBot

Multi-Modal Digital Assistant 🤖

Feb 2023 - Jun 2023

Developed a digital assistant (ChatBot) with speech, text, and vision interaction capabilities. As part of the team I was responsible for all audio-processing related task including speech recogntion, speaker identifiaction and general audio handeling. This included the integration of wav2vec and mozilla deepspeech model, the basic audio handeling was done with JavaSoundAPI and TarsosDSP. Additionaly, i worked on integrating the face detection algorithms, getting my hands dirty with Python, C++ and OpenCV

Tech Stack:

  • Java: JavaSoundAPI, TarsosDSP, JavaFX, Gradle
  • Python: Wav2Vec, Mozilla DeepSpeech, FaceNet, Librosa, PyTorch
  • C++: OpenCV

Programs

This section showcases simple programs, I often developed out of personal need.

Job Application Tracker

November 2024

A simple C# WPF application built on .NET 8 LTS. Each job application has a status (e.g., applied, in-progress, rejected). The application follows the Model-View-ViewModel (MVVM) design pattern. Future updates will include a 'Statistics' section, where users can visualize their progress. Coming soon.

GUI Screenshot

Tech Stack:

  • C#: WPF, .NET 8 LTS

Pi Movie Converter

September 2024

This movie converter was built to fulfill some missing features in QuickTime Player. I needed conversion from .MOV to .MP4 and to share videos, often preferring smaller file sizes, which is achieved here through resolution and bitrate scaling. Additionally, I used this program to speed up videos, which is great for creating demos of larger projects.

GUI Screenshot

Tech Stack:

  • Python: ffmpeg, pyqt5

Pi Audio Info

September 2023

This was originally created because I couldn't find an easy-to-use GUI spectrum analyzer that showcased the source quality of various audio files, including .mp3, .wav, and .aiff. While there are many options available on Windows, I decided to code one myself as a Mac user. The information in the frequency domain, up to 22.1 kHz, helps verify if the sample rate of the source file — potentially damaged during online distribution — is actually 44.1 kHz or lower. In addition, this app also displays basic file information. Available soon.

GUI Screenshot

Tech Stack:

  • Python: Matplotlib, Librosa, Tinker