Similarly to you, I spent a short while trying to sell VRP optimization with an API business model, and what dawned on me was that most companies do not have the necessary in-house expertise to integrate optimization into their existing tools even if the API is well-designed. There also really seems not to be any urgency to do that and most logistics companies just offload their inefficiencies onto their customers. Your routes are not effective? No problem, just bill more.
Some years ago I heard about a Swedish team of optimization experts who got so fed up with selling optimization to unwilling transportation companies that they founded their own—just to mop the floor with their ineffective competition. :D
I agree that ease of use is key here. In my PhD dissertation, I tried to address the issue by adding self-adaptivity within transportation management systems, mostly through automatic parameter tuning and algorithm selection. Such approaches remove some amount of fiddling when the optimization tool is adapted to a new optimization problem. Worth a look, perhaps, if you're interested.
Many thanks again for the interesting article and all the best with Timefold.
1) E.g., already by the '90s, we had quite capable algorithms for the VRP. I have open-sourced a library of classical VRP algorithms called VeRyPy, containing simple and not-so-simple heuristic algorithms. It has enjoyed modest success among VRP researchers and practitioners. Nowhere near the success of OptaPlanner, but also, the purpose is different—OptaPlanner is production-ready, whereas VeRyPy is more geared towards education and research purposes.
A recent example of "knowing better optimisation experts" I know of in my local area are with garbage trucks. A expensive company was hired to optimize - yet they apparently forgot some real world factors, like with snow and ice not all the trucks can go everywhere, some roads too narrow, etc. with the result of chaos and the workers fighting succesfully to be allowed to continue influence their working schedule, they sucesfully managed without the external experts.
People do inefficient things. And they also do it for years, thinking it is a universal law. But usually an expert from the outside will still not know better how to do things.
https://www.kth.se/en/om/innovation/alumner/airmee-levererar...
Still, it _is_ a good story, and plausible based on what I saw to be the state of the industry back then. Your run of the mill last-mile courier services were really badly organized, from the mathematics and optimization side as simple as they get, and ability to build a robust optimization transportation management system would've given serious competitive edge.
(edit: removed repeated words)
However I can tell you that this kind of thing really does happen. One of the injection molding conferences I attended had several presentations where companies were contemplating building more injection molding lines, but instead hired consultants (of course rolls eyes) to re-optimize their injection mold programs. After tweaking all the parameters in to speed up injection rates, it turned out the company had about 50% more capacity than they thought.
Now, I suspect this was shit management more than anything. I strongly suspect that the people on the line told their superiors that they needed to fix the programs and got ignored.
However, you couldn't sell anything to the management chain until they were staring at having to spend cash. Selling people on "saving money" is always super difficult as it requires them to change something that is nominally "working". Selling people on "not having to spend money they are staring at imminently" is always way easier. Obviously the easiest sell is "spend money to make a lot more money", but that doesn't happen all that often.
However, the cost and risk to achieve that productivity gain is typically huge. Many Operations Research projects fail. And when they do, they are very expensive failures. "Managers getting fired" expensive.
With our technology, we're making OR projects easy and quick to put into production.
Yes, having in-house expertise to integration optimization into their existing tools is hard. Especially if they use low level solver APIs (especially if it's math equations).
We're working making that easier with high-level REST APIs (Timefold Field Service Routing, etc). And with education (Timefold Academy) by creating videos and articles on how to integrate real-time planning, continuous planning, labor law constraints, fairness, cost reduction, etc
What you're talking about is known as a problem reduction.
Edit: vasco was faster with their question haha
Really, it's hard to say it's not AI.
Glad to see an open source project gaining benefit from the AI hype train at least. :)
Instead of explicit constraints, is there a way to provide a calculation that can be minmaxed? If every order has a due date, can I say +/- 3 days = 0, 7 early = 9999 (not allowed), 7+ days late = (days late)^2?
Please email me (in profile) if you want to discuss.
How do folks normally get the distance matrix? I ended up just using the Mapbox Optimization API instead of using a solver.
[1] https://wiki.openstreetmap.org/wiki/Routing/offline_routers
Our maps service does do a bunch of additional optimizations (caching, incremental requests, ...) to assist any solver model we run that request maps information.
And larger packages will furthermore include a volume discount.
Disclaimer: I'm one of the founders.
so an optimization problem can then be described with a set of those hard/soft contraints
We also have an overview of our open source solver here: https://timefold.ai/open-source-solver
I just found OptaPlanner and subsequently TimeFold few months ago, as I was searching for a solution for my wife's veterinary clinics employee scheduling problem. The problem is not big enough for anyone to pay for the solution, but big enough to cause stress for whom ever is dealing with manually doings the shifts.
It was interesting that there were a lot of online SaaS providers that claim to solve the problem but they just simply are not configurable for all kinds of constraints of a real workplace.
Unfortunately I also feel partially same with TimeFold, because designing those constraints really requires changing the way of thinking of many problems. While the engine is capable of doing what ever, there is a steep learning curve to do it.
So while the article mentions documentation, I would say that the documentation is far from sufficient for wide adaption.
Personally, I would have really needed documentation about a mental model of thinking about the problem, and then a ton of examples how to solve real employee scheduling problems. Problem written in a format which the business people use and then translated into an elegant constraint rule explained step by step.
I had to invest more than 40 hours to get a working MVP that solves real problems, not just those that are already coded in the example code. Most people are not willing to do that.
What I'm trying to say is that to making planner software popular, it should be also usable for trivial projects. I understand that it's hard to focus on everything, but just providing more information about real use cases and how they were solved and how to think about the design problems would make the market bigger, and bring you a lot more customers in the long run.
I just wonder how I might contribute to improve the documentation. I probably don't have deep enough understanding of the correct solution, but I will look into it.
Also irrespective of the project itself, amazing wife!
> Founders might get a wage to avoid personal financial stress
How do you make a living as a founder if you don't get a wage? Is that really a norm?
> but then also need skin in the game, typically by investing personally
And also this. Does it assume that you will invest your savings or what exactly?
The majority of successful founders are already wealthy. Those who aren't, have a pretty high chance of going personally bankrupt in the process
Until the startup has investors that agree to pay the founders a wage (to reduce personal financial stress so they can concentrate on the company) - or the startup is profitable - it's vital that your savings don't run out...
I understand the part where you invest your time and money to build the PoC but I can't imagine running a startup with VC-backed investment without paying out myself a wage. That seems crazy to me if true.
In markets where capital is more scarce, people may want to avoid giving up more equity.
The lesson in this to young people: you can either sell your time by the hour, or buy other's time and use that productively. The former is very finite, the latter scales.
My favorite business course in undergrad was production operations management. Some time later I realized that in data engineering, critical path analysis is useful for optimizing directed acyclic graphs.
For example, it doesn't make sense to optimize the longest running task when it's not on the critical path. If you are optimizing for $, sure. But for time, there are better tasks to optimize.
My background is in AI but I would have been hesitant calling the rule based systems I wrote to automate financial descisions AI at the time.
In this case, Geoffrey also seemed hesitant in the past to refer to his system as AI (see https://www.optaplanner.org/blog/2017/09/07/DoesAIIncludeCon... ), but somtimes you just have to ride the wave that brings in the funding.
Using the shortcut of "It's AI, but it won't hallucinate because it follows all of your policy and rules" has been a great way to onboard both non technical folks and operators warming up to the idea.
Do note that the base algorithm (such as SA, TS or LA) is less than 5% of the work to get great results. We do a lot of additional things on top of that (incremental score calculation, smart neighborhood selection, multi threaded solving and many more).
https://stackoverflow.com/questions/8712955/which-drools-pro...
It is a tough niche market where you compete with excel people who have built their careers on their manual planning expertise.
Unfortunately you are pitching not to the end user but to their manager (who will have to force them to drop their spreadsheet mambo jumbo). But I guess this is the case with all AI products nowadays anyways.
Would love to have a quick chat with you or someone at timefold.ai to see if this is something we could potentially use.
Like you experienced, a good product without a team and without revenue is simply not enough, no matter how good the idea. I have unfortunately been one of the 90% of startup failures to experience that brutal reality.
My next project with a few others is to make open source coding & development profitable. We want to keep advancing open source while also helping others to get paid for their efforts. We are still technically in stealth mode, but plan to be launching soon. Our website will be codebounty.ai (we don't yet have it fully built out yet). With that being said, if you are interested to participate as a sponsor, maintainer, or contributor we would love to hear from you about what you would like to see in this program: https://docs.google.com/forms/d/e/1FAIpQLSdmlxJHIqOlwr1Nw3q0... .
We would like to see it become a place where new coders can learn, develop skills, and get mentored by others. We would also like to have it as a way for others to have an income while looking for full time employment (rather than driving for uber). Heck, it could even become a recruiting tool for companies.
If you have ideas, I would love to hear from you so that we can help to make more amazing open source projecets like Timefold a more common reality!
I want to wish you all the luck in the world with this, it sounds like it's going well.
Have you considered offering public pricing for your API, or maybe a few trial? Even if it's only for small use cases, I'd love to know I can just give you guys $100/month to cover my small use case.
On the other hand, a lot of the products that RH gave to IBM were really painful to use. Let me preface this by saying that I mean no disrespect to Geoffrey and his amazing work! And, also, I suspected I was too dumb to understand OptaPlanner in particular.
But OptaPlanner was definitely amazingly painful to use. The docs seemed horrible to me at the time, and the UX of the product was on the level of "the source code is there, to solve your problem, just understand the code base..." To model your problems meant that ideally, you'd pay for Red Hat's consulting, which would give you indirect access to the dev team, which would help you put your problem model into OptaPlanner.
A lot of the JBoss products I really liked were like that. Now, they'll die by slow death over at IBM with nobody giving a damn. I guess such is life.
I wish Geoffrey all the best with Timefold! I truly hope you'll turn it into whatever you desire, and that you'll always have more customers knocking at your door than you can handle!
[1] https://www.redhat.com/en/blog/evolving-our-middleware-strat...
What kind of use case where you trying to solve with OptaPlanner? In the past, I've seen a strong correlation between the ease of solving the problem and the availability of of a quickstart example.
For example, our tech is even used for court scheduling (in different countries), but every single one of those cases was difficult. Other cases are far more simple.
It all depends on the planning problem.
Do you remember any particular pain in your OptaPlanner experience that we can improve going forward? Around which year was this?
Geoffrey is synonymous with OR/Constraints solvers in my mind. I once had to tackle an issue in this domain and wound up using OptaPlanner after weeks of research.
It had the most intuitive API and the best community support by far.
It's a bummer to hear that OptaPlanner was killed, but it sounds like ultimately it led to something greater, so there's a silver lining.
Wishing you the best in your future endeavors, Geoffrey!
I am wondering if there is a risk, as it is open source, that a company with bigger marketing spend starts offering timefold in the cloud, kind like AWS with Elasticsearch? Or is there a big enough moat with the models on your cloud platform to prevent this situation?
An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.
I’m glad things went well for you and that you managed to regain control of your life’s work.
Congrats on all this great progress! Please take care :-)
I have kind of an off-topic question — how did y'all get a license for using SF Pro as a Web Font on your website? Afaik Apple on licenses the SF Pro as a font to only be used on Apple devices and apps?
This is why I don't buy support from companies.
- In OR Tools, you need to write your constraints as mathematical equations. You can only provide your own function in a few scenarios, such as calculating the distance between two points. This allows OR Tools to eliminate symmetries and calculate gradients to improve its solution search. In Timefold, your constraints are treated like a black box, so your constraints can use any function and call any library you like (although you shouldn't do things like IO in them). However, since said constraints are a black box, Timefold is unable to eliminate symmetries or calculate gradients.
- In OR Tools, you have very little control in how it does its search. At most, you can select what algorithm/strategy it uses. In Timefold, you have a ton of control in how it does its search: from what moves its tries to adding your own custom phases. If none are configured, it will use sensible defaults. That being said, certain problems strongly benefit from custom moves.
- In OR Tools, you do not need to create custom classes; you create variables using methods on their domain model classes. In Timefold, you need to define your domain model by creating your own classes. This adds initial complexity, but it makes the code more readable: instead of your variable being an int, it is an Employee or a Visit. That being said, it can be difficult for someone to design an initial model, since it requires an understanding of the problem they are solving.
All in all, when using Timefold, you need to think in a more declarative approach (think Prolog, SQL, etc). For example, let say you have a room assignment problem where a teacher can only teach at a single room at once, and minimize room changes. In Timefold, it may look like this:
# Typically would be stored in a parameterization object, but a global var
# is used for brevity
teacher_count = 3
@planning_entity
@dataclass
class Room:
id: Annotated[int, PlanningId]
date: int
name: str
# This can also be a Teacher object, but str is used for brevity here
teacher: Annotated[str, PlanningVariable] = field(default=None)
@planning_solution
@dataclass
class Timetable:
rooms: Annotated[list[Room], PlanningEntityCollectionProperty]
teachers: Annotated[list[str], ValueRangeProvider]
score: Annotated[HardSoftScore, PlanningScore] = field(default=None)
@constraint_provider
def timetable_constraints(cf: ConstraintFactory):
return [
cf.for_each_unique_pair(Room, Joiners.equal(lambda room: room.date), Joiners.equal(lambda room: room.teacher))
.penalize(HardSoftScore.ONE_HARD)
.as_constraint('Teacher time conflict'),
cf.for_each_unique_pair(Room, Joiners.equal(lambda room: room.teacher))
.filter(lambda a, b: a.name != b.name)
.penalize(HardSoftScore.ONE_SOFT)
.as_constraint('Minimize room change')
]
solver_config = SolverConfig(
solution_class=Timetable,
entity_class_list=[Room],
score_director_factory_config=ScoreDirectorFactoryConfig(
constraint_provider_function=timetable_constraints
),
termination_config=TerminationConfig(
spent_limit=Duration(seconds=5)
)
)
solver_factory = SolverFactory.create(solver_config)
solver = solver_factory.build_solver()
problem: Timetable = build_problem()
solver.solve(problem)
Compared to OR Tools: teacher_count = 3
problem: Timetable = build_problem()
model = cp_model.CpModel()
objective = []
room_vars = [cp_model.model.new_int_var(0, teacher_count - 1, f'room_assignment_{i}' for i in range(len(problem.rooms)))]
room_vars_by_date = {date: [room_vars[i] for i in range(len(problem.rooms)) if problem.rooms[i].date == date] for date in {room.date for room in problem.rooms}}
room_vars_by_name = {name: [room_vars[i] for i in range(len(problem.rooms)) if problem.rooms[i].name == name] for name in {room.name for room in problem.rooms}}
for date, date_vars in room_vars_by_date.items():
model.AddAllDifferent(date_vars)
for name, name_vars in room_vars_by_name.items():
for assignment_1 in names_vars:
for assignment_2 in names_vars:
if assignment_1 is not assignment_2:
objective.add(assignment_1 != assignment_2)
model.minimize(sum(objective))
solver = cp_model.CpSolver()
status = solver.solve(model)Reminds me of NextMv [1] loved their episode on SWE daily. Can anyone compare them to this and how they’re doing?