When generation fails (INFEASIBLE)

When generation fails (INFEASIBLE)

An INFEASIBLE result means the solver proved that no schedule can satisfy every hard constraint at once given your current data — see Hard vs. soft constraints for why hard constraints can't just be "mostly" met. Two other unsuccessful results look similar but mean something quite different — neither says anything is wrong with your data (see Other results at the end of this page):

  • TIMED_OUT — the solver ran out of time before it could find a timetable or prove that none exists.
  • FAILED — something went wrong on our side, such as a crash.

Both the Generate page and the saved-timetable editor's Lock & Re-solve show the same thing on INFEASIBLE: No timetable exists for this data. Here's why, followed by what's contradictory. Each problem names the lessons, teachers, classes and periods involved, and says what you could change. The small grey tag beside a message (H4 · H9, for example) is the rule it relates to on the hard constraints reference page.

Two kinds of explanations you might see

The solver looks for the problem in two ways, and the shape of the explanation tells you which one found it.

1. Quick checks (one sentence each, with a suggested fix). Before it starts searching for a timetable at all, the solver checks your data for contradictions it can prove directly, each of which on its own makes every timetable impossible. If any of them finds something, you get the answer within seconds: there's nothing for the search to find, so it doesn't run (for Check Feasibility either). They cover:

  • Rooms — a class with more students than the largest room holds; a Required Room Tag that no room has (with a hint when a room has almost the same tag, such as Lab for lab: tags must match exactly); a lesson whose classes together don't fit in any room, or whose tagged rooms are all too small; and lessons that can only use certain rooms (the one lab, say) needing more time in them than those rooms have.
  • Time — a lesson longer than any run of periods between breaks; a lesson whose teachers are never free for the whole of it (for a double period, two periods in a row) once their unavailable periods and department meetings are counted; a teacher or class with more lessons than periods, or more double periods than fit in a row between breaks; more lessons than all the rooms can hold between them.
  • Locked Time Slots (Creating Lessons) — more of them than the lesson's Count; one on a break, too close to the end of the day for the lesson's Duration, or when one of its teachers is unavailable or in a department meeting; two that put the same teacher or class in two places at once.
  • Locked cells (Lock & Re-solve) — a cell kept in a room that no longer fits the lesson, or at a period it can no longer be at; two locked cells, or a cell and a Locked Time Slot, that clash.
  • Blocks — lessons in one Block that are for the same class, or have the same teacher, so they can't run at the same time; no period when all their teachers are free (or fewer such periods than the Block runs each week); more lessons in the Block than there are rooms that suit them.

Each message names the lessons, teachers, classes, rooms and periods involved, and says what to change. These checks only report what's certain: when one of them fires, no timetable can exist until it's fixed. Fix every one listed before generating again.

2. Settings that clash (a list). If none of the quick checks finds anything but the search still proves that no timetable exists, the cause is a combination of settings that are each fine on their own. The solver then works out which of your settings are involved and shows them as one list under These settings can't all hold at once. It only ever lists things you set up: Locked Time Slots (H6), teachers' unavailable periods (H4), department meetings (H9), Blocks (H7), a lesson's room size or Required Room Tags (H2/H3), cells you kept locked before Lock & Re-solve (H8), and how many times a week a lesson runs (H1). The rules that always hold (no double-booking, nothing on a break, nothing past the end of the day) are never listed on their own: they show where a contradiction bites, not what to change.

Where two entries are connected through a teacher, the lesson says who teaches it — "Art (9B, taught by Mr Jones)" — so you can see how they fit together. Each entry has its own suggested change underneath.

The solver narrows the list down to the settings that matter, checking them one at a time. When it finishes, the heading says changing any one of them resolves this conflict — each entry was checked to be needed. When an entry lists several of a teacher's unavailable periods and says "any one of these periods", each period was checked too, so freeing any one of them is enough. On a very large school the solver can run out of time before it has narrowed the list down; the heading then says so, and some entries may not be part of the problem.

Lessons that can't all fit. Occasionally none of your settings is involved: some lessons can't all be scheduled whatever you set, because of what they share. You'll then see a single message naming those lessons and the teachers and classes they share — for example, three lessons that each share a teacher or class with the other two, in a week with only two periods. Lower a lesson's Count, give one of them another teacher, or add periods.

3. Further conflicts, and the smallest fix. A list of clashing settings describes one conflict, and your data can have several unrelated ones. So after it, the solver checks whether changing the cheapest setting in that conflict is enough for a timetable to exist. If it isn't, there's another conflict, and the solver finds and lists that one too. The lists are then headed Conflict 1 of 2, Conflict 2 of 2 and so on, and "changing any one of them" applies to each conflict on its own. This keeps going until it finds changes that allow a timetable.

Those changes are then shown in green as The smallest fix: a short list of edits which, made together, let a timetable exist. For example: remove a Locked Time Slot, make a teacher available at one period, or run a lesson 4 times a week instead of 5. The solver has actually found a timetable with every change on the list made, so the fix is certain to work. "Smallest" is measured by how easy each kind of change usually is. Removing a Locked Time Slot or unlocking a cell counts least. Taking a lesson out of a Block or relaxing a room requirement counts more. Freeing a teacher's unavailable period or moving a department meeting counts more again, since those usually reflect real life. Leaving teaching out counts most. It's a suggestion, not the only way: any change that breaks each conflict listed works too, so you might prefer a different setting from the same conflict.

On the Generate page, the timetable the solver found with those changes is shown below as Timetable with the suggested fix. It's a preview only. It ignores the settings the fix changes, and it can't be saved: make the changes, then generate again.

This takes up to your plan's time limit once more (at least 30 seconds). On a large school with several conflicts it can run out before it finds a fix. You'll then see every conflict it found, each certain, but no fix, and a note that there may be further conflicts. Fix those and generate again.

Warnings

A collapsible warnings section lists things in your data that look wrong, or that the solver had to ignore, but that don't make a timetable impossible on their own. It appears on every result: below the explanation when generation fails, and as Completed with N warnings when it succeeds, since a valid timetable can still have been made while ignoring something you set up.

  • A reference to something that no longer exists. A lesson's teacher or class, a Locked or Preferred Time Slot, a teacher's unavailable period, or a department's meeting slot that points at a record that has been deleted. Periods are the usual cause: saving the Periods page with a new day or start time replaces that period with a new one. The solver ignores the reference, so a lesson locked to a deleted period is not locked, and a lesson whose teacher was deleted is scheduled without them. On the edit form, the missing entry shows as (deleted): remove it and choose again.
  • A locked cell that was ignored (Lock & Re-solve): its lesson, room or period no longer exists, so the solver was free to move that lesson. See Manually editing a saved timetable.
  • A Block count mismatch: lessons sharing the same Block value with different Counts. It never causes an INFEASIBLE result by itself (the block still partially works; see Blocks (parallel activities)), but it's a common reason a block-based schedule doesn't come out the way you expected.
  • Time ran out before the timetable could be improved (on a completed result only): the timetable meets every rule, but may not be as well arranged as it could be. You can use it as it is; generating again may do better.

Occasionally you'll see a note instead, for something the solver corrected on its own (for example, periods stored out of time order). Notes need no action.

Reading a real example

Three settings under These settings can't all hold at once:

  • Art (9C, taught by Mr Jones) is locked to Monday 09:00. (tagged H6)
  • Block “Electives” runs Math (9A, taught by Ms Smith) and Art (9B, taught by Mr Jones) at the same time. (tagged H7)
  • Ms Smith is unavailable at Monday 10:00. (tagged H4)

Read together: Ms Smith, who teaches the Math in the Electives Block, is free only at 09:00 on Monday, so the Block has to start then — but Mr Jones teaches both the Block's Art and 9C's Art, which is locked to 09:00, and he can't be in two places at once. Each setting is fine on its own, which is why no quick check caught it. Move the lock, take one of the lessons out of the Block, or free up Ms Smith at 10:00 — any one of the three breaks this contradiction.

Below it, The smallest fix suggests one of the three: Remove the Locked Time Slot at Monday 09:00 from Art (9C). A lock is the easiest kind of setting to change, and the solver found a timetable without it. That timetable is shown at the bottom of the page.

What to try

Almost every fix is some version of "give the solver more room to work with": relax or remove a Locked Time Slot, free up a teacher's unavailable period, widen a room tag requirement, add more periods or rooms, or reduce a lesson's Count/Duration. Constraint weights on the Constraints page never help here — see Hard vs. soft constraints — since weighting only affects soft constraints, and none of those can cause an INFEASIBLE result.

Working out why gets as long as your plan's time limit (and at least 30 seconds), and looking for further conflicts and the smallest fix the same again. If even that isn't enough (rare, but possible on very large schools), you'll see a single message saying that no timetable exists but working out why took too long, instead of a list — in that case, the most reliable next step is trimming back whichever change you made most recently and trying again.

Other results

TIMED_OUT — ran out of time. Each run has a time limit (set by your plan; the message says how long). TIMED_OUT means the solver used all of it without either finding a timetable or proving that none exists. The message says what is known at that point:

  • Your data passed the quick checks. Every check listed under 1. Quick checks above ran before the search started and found nothing, so none of those mistakes is to blame.
  • Whether a timetable exists is still unknown. Either there is one and the search needed more time to find it — the usual case for larger schools — or a combination of settings rules every timetable out, and proving that would have taken longer than the limit too.

What to try:

  1. If it started after a recent change, undo that change and try again. New Locked Time Slots, unavailable periods, Blocks or Required Room Tags can make a timetable much harder to find, or impossible in a way only the full search can prove. On a Lock & Re-solve, cells you moved and locked count as a change too.
  2. If it keeps happening with data that used to work, or on a school that's simply grown, click Request Help on the Generate page: our team can raise your school's time limit.

What won't help: running Check Feasibility instead — a generation already looks for any valid timetable before it starts optimizing, so Check Feasibility rarely gets further in the same time. Nor will turning off soft constraints on the Constraints page: the search for that first timetable doesn't try to satisfy them anyway, and in our testing turning them off didn't make the difference for schools that timed out.

While a request is running, the Generate page shows which step it's on — Searching for a timetable, Improving the timetable, Working out why... — and for how long, so you can see whether it's still searching as it nears the limit. See Generating a timetable for the steps.

FAILED — a problem on our side. Something went wrong while running the solver (for example, a crash). It isn't caused by your data, and there's nothing to fix on your end. Try again; if it keeps failing, click Request Help on the Generate page and mention the request ID shown on the result, so we can look at what happened.

Problem reference

Every message on a result has an About this link to its entry below. Messages also have Edit links that open the lessons, teachers, classes, rooms, departments or periods they name, ready to change. On a failed Lock & Re-solve those links open in a new tab, so you don't lose the unsaved changes in the editor. Each entry below says what the message means and what usually fixes it. The message itself names the exact records and numbers.

Quick checks: rooms

A class is bigger than every room

The class has more students than the largest room holds, so none of its lessons can be placed anywhere (H2). Check the class's Size on the Classes page, since a typo is the usual cause. Otherwise add a bigger room, or split the class into subgroups.

No room has a Required Room Tag

A lesson's Required Room Tags include a tag that no room has (H3). Tags must match exactly, so when a room has almost the same tag (Lab for lab), the message suggests it. Correct the tag on the lesson, or add it to the right rooms.

No single room suits a lesson

Some rooms are big enough and some have the tags, but none is both. Either the lesson's classes together are bigger than every room with its tags, or no room has all of its tags (H2, H3). Enlarge or re-tag a room, drop a tag, or split the lesson between smaller groups.

Not enough time in the rooms some lessons can use

Lessons that can only use a certain set of rooms (the one lab, say) need more time in them than those rooms have. That can be in total, or as double (or longer) periods between breaks (H3/H2, H1). Add another room with the tag, let some lessons use other rooms, or reduce their Count or Duration.

Not enough room time overall

All the lessons together need more room-periods than all your rooms offer in a week, or there are no rooms or no lesson periods at all (H1). Add rooms or periods, or reduce lessons.

Quick checks: time

A lesson is longer than any stretch between breaks

The lesson's Duration is more periods than any day has in a row before a break or the end of the day (P1, H5). Shorten the lesson, or change a break on the Periods page.

A lesson's teachers are never free for it

There's no period when all of the lesson's teachers are free for the whole lesson (H4, H9, P1). Their unavailable periods and department meetings leave no gap, or, for a double period, they're never free for two periods in a row. Free up some of the teacher's unavailable periods, move a department meeting, or give the lesson another teacher.

A teacher has more lessons than free periods

The teacher's lessons need more periods than they're available for once unavailable periods and department meetings are taken out (the message says how many of each). Or they need more double periods than the teacher's free time holds in a row (H4, H9). A lesson with two teachers counts in full for each of them. Give some lessons to another teacher, reduce a Count, or free up their time.

A class has more lessons than the week

A class needs more lesson-periods than the week has, or more double periods than fit between breaks (H1). It's counted per smallest subgroup, so lessons for sibling subgroups (10A / French and 10A / German) can run side by side. Reduce a Count, or add periods.

Quick checks: Locked Time Slots

More Locked Time Slots than lessons

A lesson has more Locked Time Slots than its Count / Week (H6). Remove the extra locks or raise the Count.

Locked to a break

A Locked Time Slot is a break, or a longer lesson locked there would run into one (H6, H5). Move the lock, or change the period's type on the Periods page.

Locked too close to the end of the day

A lesson longer than one period is locked to a slot too late in the day for it to fit (H6, P1). Lock it to an earlier period.

Locked when a teacher isn't free

A lesson is locked to a period (or, for a longer lesson, a run of periods) when one of its teachers is unavailable (H6, H4) or in a department meeting (H6, H9). Move the lock, or change the teacher's unavailable periods or the meeting.

Locked Time Slots clash

Two lessons are locked to the same period and share a teacher or a class, who can't be in two places at once (H6, H1). Move one of the locks.

Quick checks: Blocks

A Block's lessons share a class

Lessons in one Block run at the same time, but two of them are for the same students (H7, H1). Give them different classes (usually subgroups, such as 9A / French and 9A / History), or take one out of the Block.

A Block's lessons share a teacher

Lessons in one Block run at the same time, but two of them have the same teacher (H7, H1). Give one of them another teacher, or take it out of the Block.

A Block's teachers are never free together

There's no period when every lesson in the Block can start, because their teachers' unavailable periods and department meetings never leave them all free at once. Or there are fewer such periods than the Block runs a week (H7, H4, H9). The message says what takes each teacher's time. Free up a common period, or move a lesson out of the Block.

Not enough rooms for a Block

A Block's lessons run at the same time, so each needs its own room at once, but fewer rooms suit them than there are lessons (H7, H2/H3). Add or re-tag a room, or relax a lesson's room requirements.

Quick checks: locked cells (Lock & Re-solve)

A locked cell can't stay where it is

A cell you kept locked before Lock & Re-solve sits in a room that no longer fits the lesson, or at a period it can no longer be at: a break, the end of the day, or a time when a teacher is now unavailable or in a meeting (H8). Usually something changed after the timetable was saved. The cell is outlined in red in the editor. Unlock it with Unlock the cell involved, or undo the change.

Locked cells clash

Two locked cells, or a locked cell and a Locked Time Slot, put the same teacher, class or room in two places at once (H8, H1). The locked cells involved are outlined in red in the editor; unlock one of them.

Explanations

Settings that can't all hold at once

One of a set of your settings that together rule out every timetable, though each is fine on its own. See 2. Settings that clash above. When the heading says changing any one of them resolves this conflict, change whichever is easiest. With Conflict 1 of 2 and so on, your data has more than one conflict, and each needs a change of its own (see 3. Further conflicts, and the smallest fix). On a failed Lock & Re-solve, any locked cells in the list are outlined in red, and Unlock these N cells unlocks them all at once.

Lessons that can't all fit

These lessons can't all be scheduled whatever your settings, because of the teachers and classes they share (H1). See Lessons that can't all fit above. Lower a Count, give one of them another teacher, or add periods.

The smallest fix

One of the changes in The smallest fix: made together, they allow a timetable, and the solver has found one to prove it. See 3. Further conflicts, and the smallest fix above for how "smallest" is measured. Make the changes (the Edit links open each record), then generate again. A change to unlock a cell outlines that cell on a failed Lock & Re-solve, like the cells in a conflict. On the Generate page, the timetable found with the fix is shown below as a preview.

Working out why took too long

No timetable exists, but the solver ran out of time working out the cause. All the quick checks passed. Undo your most recent change and try again, or use Request Help on the Generate page.

No explanation found

No timetable exists, but the solver couldn't repeat its proof while working out why. This is rare, and not caused by anything in your data. Generate again, and if it happens again use Request Help.

A conflicting rule (older results)

Results from before September 2026 listed the solver's raw conflict set. It included rules that always hold (no double-booking, breaks, day ends) and wasn't necessarily narrowed down. Generate again to get the current, settings-based explanation.

Warnings and notes

A reference to a deleted record

See A reference to something that no longer exists under Warnings above. On the edit form the missing entry shows as (deleted): remove it and choose again.

A locked cell was ignored

A locked cell's lesson, room or period no longer exists, or the lesson now runs fewer times a week, so the solver was free to move it (H8). Check where that lesson ended up before saving.

Block count mismatch

Lessons in one Block have different Count / Week values, so only their first instances run in parallel (H7). Give them all the same Count, or move the extra lessons out of the Block.

Periods out of order (a note)

Your periods weren't stored in time order within each day, so the solver put them back in order for this run (P1). Nothing to do. Saving the Periods page again stores them in order.

Not improved (on a completed result)

The timetable meets every rule, but time ran out before it could be improved on your preferences. You can use it as it is; generating again may do better.

Outcomes

Ran out of time

See TIMED_OUT under Other results above.

Something went wrong on our side

See FAILED under Other results above.

The request couldn't be read

The solver couldn't read the request. That's a problem on our side, not in your data. Try again, and if it happens again use Request Help and mention the request ID.