Code Is Broken

On a journey to turn lines of code into innovative solutions

Giuseppe Soriano Software Engineer

Latest notes

Markov Decision Processes and the Foundations of RL

These notes introduce the foundational concepts of Reinforcement Learning (RL), a subfield of machine learning where agents learn to interact with an environment to maximize cumulative rewards. The content is based on the teaching material of Lorenzo Fiaschi for the Symbolic and Evolutionary Artificial Intelligence course at the University of Pisa (a.

Read more

PyTorch Tensor Operations

PyTorch Tensor Operations Tensors are multi-dimensional arrays that generalize scalars, vectors, and matrices to higher dimensions. In PyTorch, tensors serve as the fundamental building block for storing data and performing operations within machine learning models. Tensor algebra is a branch of mathematics dealing with tensors and their mathematical operations.

Read more

Autograd and Optimization Techniques

Consider a function $f$ that depends on some parameters $\theta$: $f(x | \theta)$. We have a set of input-output pairs, $(x_0, y_0), (x_1, y_1), \ldots, (x_n, y_n)$. For each input-output pair, we can define an error function $E$ that measures the difference between the output of $f$ and the actual value $y$.

Read more

Many-Objective Optimization and the NSGA-III algorithm

In engineering, optimization problems often involve multiple conflicting objectives. While classic Multi-Objective Optimization typically refers to problems with 2 or 3 objectives (see Families of Multiobjective Genetic Algorithms), there exist scenarios with a considerably higher number of objectives. When the number of objectives increases beyond a certain threshold, problems are categorized differently:

Read more

Families of Multiobjective Genetic Algorithms

In real-world optimization problems, it is common to encounter scenarios where multiple conflicting objectives must be optimized simultaneously. This is the essence of multiobjective optimization, where instead of seeking a single best solution, the goal is to approximate a set of trade-off solutions that form what is known as the Pareto front.

Read more

Connecting the Dots, one by one…

Knowledge isn’t just a destination; it’s a never-ending journey, a winding road paved with curiosity, deep dives, and the occasional detour into the unknown. This blog is not a mere collection of articles—it’s a space for exploration, where ideas take shape, concepts are unraveled, and the joy of learning is always in motion. Whether it’s a complex algorithm, a thought-provoking discussion on AI ethics, or the subtle art of optimizing code, every topic is approached with a mix of rigor and wonder.

But understanding goes beyond just knowing. It’s not enough to memorize definitions or follow trends; true knowledge is about asking the right questions, challenging assumptions, and connecting the dots between theory and real-world applications. Curiosity isn’t just encouraged here—it’s the fuel that powers every post.

From machine learning and data science to software engineering and beyond, this blog delves into the bits, the logic, and everything in between. It bridges the gap between abstraction and implementation, offering insights that go beyond the surface. Whether you’re here to decode an algorithm, discover a new approach, or simply indulge in the pleasure of intellectual exploration, you’re in the right place.

Knowledge thrives in discussion, in questioning, in the constant push to refine our understanding. So, as long as there are new ideas to explore, new challenges to tackle, and new perspectives to consider—this blog will continue evolving. After all, knowledge never sleeps.

More about me