Become a sponsor to Ugur Arikan
Hi, I'm Uğur Arıkan
I am an operations research (OR) scientist, interested in optimization, algorithms and systems thinking & design.
me |> Middle East Technical University (Ankara)
|> Singapore University of Technology and Design (Singapore)
|> DHL Data & Analytics (Bonn)
| github | email | linkedin | cv | crates | nuget |
❤️ I like
I am very enthusiastic about all things OR; my interests include mathematical programming, optimization algorithms, networks, routing, multiobjective decision making and decision making under uncertainty.
I also like programming languages.
- rust ❤️🦀
- frequently c#, react and typescript 👍
- curiously and closely watching go, f#, zig and mojo 🤔
🎯 𝙸'𝚖 𝚞𝚙 𝚝𝚘
Two mature goals (i) OR & rust, and (ii) concurrency; and exciting side quests.
OR & rust
Among the milesones, current focus with highest priority is developing a mathematical modeling crate:
- expressive, solver-agnostic, type-safe, macro-free and concise with no more lines than model-on-paper
- below is a demo in c# and here is the documentation
concurrent programming and parallel processing
This is an exciting and ongoing journey that started with working on pinned vectors; i.e., vectors with pinned elements guarantees.
see PinnedVec for the trait definition, and SplitVec and FixedVec for two implementations
When memory locations of elements do not implicitly change while the vector grows, providing memory safety in a concurrent program becomes much easier.
ConcurrentBag and ConcurrentOrderedBag are developed as two efficient concurrent grow-only collections aiming high performance concurrent collections.
Adding concurrent element safety through ConcurrentOption in addition to pinned element guarantees allows for a concurrent vector with grow & read & update functionalities, namely ConcurrentVec. The api of the concurrent vector will continue to grow with the objective to get closer to the standard vector and be its concurrent counterpart.
In another workstream, ConcurrentIter is defined. Considering concurrent iterator as a concurrent provider of inputs and concurrent bags as the collector of outputs, it has been straightforward to develop the parallel processing crate orx-parallel which is very efficient and conveniently configurable.
miscellaneous side quests
Some of the crates resulting from interesting side topics are as follows:
- orx-iterable ➛ Defines and implements Iterable, Collection and CollectionMut traits to represent types that can be iterated over multiple times.
- orx-linked-list ➛ A linked list implementation with unique features and an extended list of constant time methods providing high performance traversals and mutations.
- orx-v ➛ Traits to unify all vectors!
- orx-imp-vec ➛ ImpVec stands for immutable push vector 👿, it is a data structure which allows appending elements with a shared reference.
- orx-priority-queue ➛ Priority queue traits and high performance d-ary heap implementations.
- orx-pseudo-default ➛ PseudoDefault trait allows to create a cheap default instance of a type, which does not claim to be useful.
Also,
- orxfun-notes ➛ articles on my observations & experiences
Mathematical Modeling Demo
Featured work
-
orxfun/orx-priority-queue
Priority queue traits and efficient d-ary heap implementations.
Rust 3 -
orxfun/orx-split-vec
An efficient dynamic capacity vector with pinned element guarantees.
Rust 2 -
orxfun/orx-linked-list
A linked list implementation with unique features and an extended list of constant time methods providing high performance traversals and mutations.
Rust 6 -
orxfun/orx-parallel
A performant and configurable parallel computing library for computations defined as compositions of iterator methods.
Rust 2 -
orxfun/orx-concurrent-vec
A thread-safe, efficient and lock-free vector allowing concurrent grow, read and update operations.
Rust 3 -
orxfun/orx-iterable
Defines and implements Iterable, Collection and CollectionMut traits to represent types that can be iterated over multiple times.
Rust 1