{
  "name": "horario-cursos-csp",
  "variables": {
    "IA": "Curso de inteligencia artificial, impartido por Ana.",
    "Python": "Curso de Python, impartido por Ana.",
    "Datos": "Curso de datos, necesita sala B."
  },
  "domain_values": [
    [9, "A"],
    [9, "B"],
    [10, "A"],
    [10, "B"]
  ],
  "domains": {
    "IA": [[9, "A"], [9, "B"], [10, "A"], [10, "B"]],
    "Python": [[9, "A"], [9, "B"], [10, "A"], [10, "B"]],
    "Datos": [[9, "A"], [9, "B"], [10, "A"], [10, "B"]]
  },
  "hard_constraints": [
    {
      "id": "python_hora_10",
      "type": "component_equals",
      "scope": ["Python"],
      "variable": "Python",
      "component": "hour",
      "value": 10,
      "explain": "Python solo puede impartirse a las 10."
    },
    {
      "id": "datos_sala_b",
      "type": "component_equals",
      "scope": ["Datos"],
      "variable": "Datos",
      "component": "room",
      "value": "B",
      "explain": "Datos necesita sala B."
    },
    {
      "id": "ana_no_solape",
      "type": "component_not_equals",
      "scope": ["IA", "Python"],
      "left": "IA",
      "right": "Python",
      "component": "hour",
      "explain": "Ana imparte IA y Python, no puede estar en dos cursos a la misma hora."
    },
    {
      "id": "sala_hora_unica",
      "type": "all_different_values",
      "scope": ["IA", "Python", "Datos"],
      "explain": "Dos cursos no pueden ocupar la misma sala en la misma hora."
    }
  ],
  "soft_preferences": [
    {
      "id": "ia_sala_a",
      "type": "prefer_component",
      "variable": "IA",
      "component": "room",
      "value": "A",
      "penalty": 1,
      "explain": "IA prefiere sala A por pizarra grande."
    },
    {
      "id": "datos_hora_9",
      "type": "prefer_component",
      "variable": "Datos",
      "component": "hour",
      "value": 9,
      "penalty": 1,
      "explain": "Datos prefiere la primera hora."
    }
  ],
  "candidate_schedules": {
    "valid_best": {
      "IA": [9, "A"],
      "Python": [10, "A"],
      "Datos": [9, "B"]
    },
    "valid_but_more_cost": {
      "IA": [9, "B"],
      "Python": [10, "A"],
      "Datos": [10, "B"]
    },
    "bad_python_time": {
      "IA": [10, "A"],
      "Python": [9, "A"],
      "Datos": [9, "B"]
    },
    "bad_teacher_overlap": {
      "IA": [10, "A"],
      "Python": [10, "B"],
      "Datos": [9, "B"]
    },
    "bad_room_slot": {
      "IA": [9, "B"],
      "Python": [10, "A"],
      "Datos": [9, "B"]
    }
  }
}
