Today I've finished #teaching to my current customer how to maintain the #software I've developed for them once I've left. Two sessions of 3h and 3h40, teaching to 4 people, all in #japanese of course. A bit tired tonight, but both the users and the IT team are super happy with what I've done (solving a #combinatorial #optimisation problem to save them several hours of work every week and help #organic #farmers ) and I was happy to teach about what I love the most: #programming .
Bonus point for preaching about #testdrivendevelopment and the beauty of #cprogramming .

Also still looking for my next contract ! #fedihire #jobsearch

https://baillehachepascal.dev/about.php

Baillehache Pascal's personal website

Baillehache Pascal's personal website

@BernhardWerner My favorite alternative #proof strategy for #induction proofs are #combinatorial (counting) proofs.

I suppose the standard example might be the proof of the coefficients in the binomial theorem expansion, or for the sum of binomial coefficients being powers of 2. These can be proved by induction, of course, but I'm not sure that's common given how easier it is to do a counting proof. It is also much clearer and avoids tedious algebra.

One I like is proving that the sum 1 + 2 + 3 + โ‹ฏ + ๐‘› is ๐‘› + 1 choose 2, the binomial coefficient \(\binom{n+1}{2}\). Bijection proof, counts the same thing in two ways. The thing being counted is the number of ways of choosing two things (distinct, without repetition) from the set {0, 1, ..., ๐‘›}. By definition, it is the binomial coefficient we want. The other way to count is to fix the larger number ๐‘˜, the remaining choices are any of the ๐‘˜ numbers from 0 to ๐‘˜ - 1. Thus, across all possible larger numbers, we get the sum from 1 to n.

An alternative alternate proof of the same, slightly more geometric is as follows: arrange dots in a triangle, 1 on row 1, 2 on row 2, and so on up to row n, with n dots. Add a phantom row of n+1 dots below. We want to add up all dots in first n rows: โˆ‘ ๐‘–. If you think of all of this as a binary tree/DAG, then every dot has two children (imagine Pascal's triangle). If you pick any two dots in the phantom row, their common ancestor is unique. So counting dots is same as picking two dots in phantom row. Which is the binomial coefficient we want.

Benjamin and Quinn's book on combinatorial proofs is amazing for interpretations of this form (I learned the first proof from it). See also: https://en.wikipedia.org/wiki/Combinatorial_proof

Combinatorial proof - Wikipedia

Promoted to the Legend league of "Smash the Code" in CodinGame tournaments. ๐ŸŽ‰
A clear validation of my MiniFrame framework, which I keep hard working on every week.
#programming #tournament #ai #combinatorial #optimisation

\({n+1 \choose k} = \sum_{i=0}^n {i \choose k-1}\)

In words, the above equation says that instead of choosing k things out of n+1 things, we will choose k-1 things out of a bunch of i things. Vary i from 0 to n, and add up all the \( {i \choose k-1} \). Somehow this summation also counts the number of ways of picking k things from n+1 things.

#Combinatorial #proof time!

The LHS is the number of ways of picking k things out of n+1 things. To get the RHS, we'll count the same thing but in a long-winded way. First, let the n+1 things be the numbers {1, 2, ..., n, n+1}. We'll condition on the largest number ๐‘š that gets picked, and then count the number of ways to pick the remaining k-1 things from all remaining smaller numbers. If ๐‘š=1, then we have 0 smaller numbers and need to pick k-1 out of them โŸถ \( {0 \choose k-1} \). If ๐‘š=2, then we only have 1 smaller number and need to pick ๐‘˜โˆ’1 numbers. As ๐‘š varies from 1 to ๐‘›+1, the terms being added vary as \( {i \choose k-1} \) where ๐‘–=๐‘šโˆ’1.

Each of these ways is an independent way of picking k things, so by the sum rule, we get the RHS as the number of ways of picking k things from n-1.

Note that the same proof idea gives a really nice counting based proof for the formula for the sum of the first n natural numbers.

#math #counting

'Combinatorial Optimization and Reasoning with Graph Neural Networks', by Quentin Cappart, Didier Chรฉtelat, Elias B. Khalil, Andrea Lodi, Christopher Morris, Petar Velickovic.

http://jmlr.org/papers/v24/21-0449.html

#graph #combinatorial #solvers

Combinatorial Optimization and Reasoning with Graph Neural Networks

Out now! EvoLP.jl 1.0: A playground for evolutionary computation in #JuliaLang :julia:

Create modular #evolutionary #computation solvers for a variety of #optimization tasks including discrete, continuous and #combinatorial problems in #AI

Thanks to the Norwegian Open AI Lab for the support!

https://github.com/ntnu-ai-lab/EvoLP.jl

GitHub - ntnu-ai-lab/EvoLP.jl: A playground for evolutionary computation in Julia

A playground for evolutionary computation in Julia - GitHub - ntnu-ai-lab/EvoLP.jl: A playground for evolutionary computation in Julia

GitHub

"While critical towards the details of Llullโ€™s proposed categories and procedures, Leibniz was taken with his overarching vision of the combinatorial art. He drew two key aspirations from Llullโ€™s work: the idea of fundamental conceptual elements, and the idea of a method through which to combine and calculate with them."

#leibniz #combinatorial

@tiago_j_m Hey do you know about #combinatorial #species? I've been researching these marvelous gizmos for a few years, and tying their development into larger theoretical mosaics. They are closely related to advances in #evolutionary/#genetic and #differentiable #programming.