Merge pull request #966 from stuarthillary/master
Port the Python example solve_shift_scheduling to C#
This commit is contained in:
@@ -1,258 +1,272 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26124.0
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cscvrptw", "cscvrptw.csproj", "{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csflow", "csflow.csproj", "{F623C1BE-13CC-4342-A32A-8CD881A199D9}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csfz", "csfz.csproj", "{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csintegerprogramming", "csintegerprogramming.csproj", "{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csknapsack", "csknapsack.csproj", "{E100DAEA-85F1-4450-A385-D796EB676630}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cslinearprogramming", "cslinearprogramming.csproj", "{B34DA790-9540-4204-B9D4-1B7B7F6327E7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csls_api", "csls_api.csproj", "{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csrabbitspheasants", "csrabbitspheasants.csproj", "{16022C04-2A33-4A95-9B41-F390F4AC0355}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cstsp", "cstsp.csproj", "{51E8911B-F773-4A18-A8B7-2BCC48114AAB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GateSchedulingSat", "GateSchedulingSat.csproj", "{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobshopFt06Sat", "JobshopFt06Sat.csproj", "{8E94B0B6-493F-4214-858F-81AFA18416E8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobshopSat", "JobshopSat.csproj", "{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NursesSat", "NursesSat.csproj", "{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpeakerSchedulingSat", "SpeakerSchedulingSat.csproj", "{E3114C14-B906-4FC8-A5B4-A815E70575B4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskSchedulingSat", "TaskSchedulingSat.csproj", "{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "tsp", "tsp.csproj", "{4BBD7983-D698-4638-B690-9D27BC44CD64}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vrp", "vrp.csproj", "{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F623C1BE-13CC-4342-A32A-8CD881A199D9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E100DAEA-85F1-4450-A385-D796EB676630}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B34DA790-9540-4204-B9D4-1B7B7F6327E7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Release|x64.Build.0 = Release|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}.Release|x86.Build.0 = Release|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Release|x64.Build.0 = Release|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{16022C04-2A33-4A95-9B41-F390F4AC0355}.Release|x86.Build.0 = Release|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Release|x64.Build.0 = Release|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{51E8911B-F773-4A18-A8B7-2BCC48114AAB}.Release|x86.Build.0 = Release|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8E94B0B6-493F-4214-858F-81AFA18416E8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E3114C14-B906-4FC8-A5B4-A815E70575B4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Release|x64.Build.0 = Release|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4BBD7983-D698-4638-B690-9D27BC44CD64}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26124.0
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cscvrptw", "cscvrptw.csproj", "{A6E213B7-2AC0-4759-B3D5-BB0FDD714915}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csflow", "csflow.csproj", "{F623C1BE-13CC-4342-A32A-8CD881A199D9}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csfz", "csfz.csproj", "{C5BF397A-03AC-4FC2-95D5-942CD52BD6FD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csintegerprogramming", "csintegerprogramming.csproj", "{0DC1F4BE-4160-4A2B-8780-7551BBE34BE2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csknapsack", "csknapsack.csproj", "{E100DAEA-85F1-4450-A385-D796EB676630}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cslinearprogramming", "cslinearprogramming.csproj", "{B34DA790-9540-4204-B9D4-1B7B7F6327E7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csls_api", "csls_api.csproj", "{58A793AC-54C1-4DC4-9FC3-7448F8C4DB19}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csrabbitspheasants", "csrabbitspheasants.csproj", "{16022C04-2A33-4A95-9B41-F390F4AC0355}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cstsp", "cstsp.csproj", "{51E8911B-F773-4A18-A8B7-2BCC48114AAB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GateSchedulingSat", "GateSchedulingSat.csproj", "{682A4597-1CD1-48C0-BC1D-8ED2496C0B9C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobshopFt06Sat", "JobshopFt06Sat.csproj", "{8E94B0B6-493F-4214-858F-81AFA18416E8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobshopSat", "JobshopSat.csproj", "{ED4158FF-7E32-4C4A-A3AB-20DC162CAB6E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NursesSat", "NursesSat.csproj", "{8525EA38-48C0-4D64-A1DE-FE54F5287B4F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShiftSchedulingSat", "ShiftSchedulingSat.csproj", "{D309FF10-3D42-446A-8402-62A941C0783A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpeakerSchedulingSat", "SpeakerSchedulingSat.csproj", "{E3114C14-B906-4FC8-A5B4-A815E70575B4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskSchedulingSat", "TaskSchedulingSat.csproj", "{768FEDB1-45A7-4051-847F-2D9B4C0E2FA3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "tsp", "tsp.csproj", "{4BBD7983-D698-4638-B690-9D27BC44CD64}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vrp", "vrp.csproj", "{DA83621B-14F2-4D26-8DD2-4E79D684DFA7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4A059795-058D-42BF-A6B8-922A0F9A39C3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{63FC51D4-C5E3-4EF0-84BE-A11D6176B54A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D3BD3816-AF4F-44DC-A75D-56492550E53B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B3A1ADA7-1DE7-4065-97B9-26E85360DE04}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3AD280FB-35EA-4CF4-9452-F90BEA18649E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FABFC6A2-2CC4-4A07-810A-E77DEE6F436E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9E03C995-2794-4C82-B164-2DB90A077262}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D776D661-577D-46FB-A09F-97597A80CC4D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2FC5ADD5-81E1-4EB0-B6F9-5158129BFAC7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Release|x64.Build.0 = Release|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{87B880DA-44AF-4DB1-8E97-A7977A99B679}.Release|x86.Build.0 = Release|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{15524DD4-2EA3-468C-A5BF-F5AD8440278E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7E9DEE69-E38A-486B-BB0C-B2124F3E2F3F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9DFA95DD-A78D-41FA-9527-FD610E9A3EFC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3175CB54-187D-45E4-A500-668BE8EA601F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Release|x64.Build.0 = Release|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{BD62083D-52CF-4128-AED8-DD996E364893}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8D696773-89A1-4790-93DE-D57C45E61515}.Release|x86.Build.0 = Release|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Release|x64.Build.0 = Release|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{921FA31F-F200-4144-8925-7F93F5BC7062}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D309FF10-3D42-446A-8402-62A941C0783A}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
571
examples/dotnet/ShiftSchedulingSat.cs
Normal file
571
examples/dotnet/ShiftSchedulingSat.cs
Normal file
@@ -0,0 +1,571 @@
|
||||
// Copyright 2010-2018 Google LLC
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Google.OrTools.Sat;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Creates a shift scheduling problem and solves it
|
||||
/// </summary>
|
||||
public class ShiftSchedulingSat
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
SolveShiftScheduling();
|
||||
}
|
||||
|
||||
static void SolveShiftScheduling()
|
||||
{
|
||||
int numEmployees = 8;
|
||||
int numWeeks = 3;
|
||||
var shifts = new[] { "O", "M", "A", "N" };
|
||||
|
||||
// Fixed assignment: (employee, shift, day).
|
||||
// This fixes the first 2 days of the schedule.
|
||||
var fixedAssignments = new (int Employee, int Shift, int Day)[]
|
||||
{
|
||||
(0, 0, 0),
|
||||
(1, 0, 0),
|
||||
(2, 1, 0),
|
||||
(3, 1, 0),
|
||||
(4, 2, 0),
|
||||
(5, 2, 0),
|
||||
(6, 2, 3),
|
||||
(7, 3, 0),
|
||||
(0, 1, 1),
|
||||
(1, 1, 1),
|
||||
(2, 2, 1),
|
||||
(3, 2, 1),
|
||||
(4, 2, 1),
|
||||
(5, 0, 1),
|
||||
(6, 0, 1),
|
||||
(7, 3, 1),
|
||||
};
|
||||
|
||||
// Request: (employee, shift, day, weight)
|
||||
// A negative weight indicates that the employee desire this assignment.
|
||||
var requests = new (int Employee, int Shift, int Day, int Weight)[]
|
||||
{
|
||||
// Employee 3 wants the first Saturday off.
|
||||
(3, 0, 5, -2),
|
||||
// Employee 5 wants a night shift on the second Thursday.
|
||||
(5, 3, 10, -2),
|
||||
// Employee 2 does not want a night shift on the third Friday.
|
||||
(2, 3, 4, 4)
|
||||
};
|
||||
|
||||
// Shift constraints on continuous sequence :
|
||||
// (shift, hard_min, soft_min, min_penalty,
|
||||
// soft_max, hard_max, max_penalty)
|
||||
var shiftConstraints = new (int Shift, int HardMin, int SoftMin, int MinPenalty, int SoftMax, int HardMax, int MaxPenalty)[]
|
||||
{
|
||||
// One or two consecutive days of rest, this is a hard constraint.
|
||||
(0, 1, 1, 0, 2, 2, 0),
|
||||
// Between 2 and 3 consecutive days of night shifts, 1 and 4 are
|
||||
// possible but penalized.
|
||||
(3, 1, 2, 20, 3, 4, 5),
|
||||
};
|
||||
|
||||
// Weekly sum constraints on shifts days:
|
||||
// (shift, hardMin, softMin, minPenalty,
|
||||
// softMax, hardMax, maxPenalty)
|
||||
var weeklySumConstraints = new (int Shift, int HardMin, int SoftMin, int MinPenalty, int SoftMax, int HardMax, int MaxPenalty)[]
|
||||
{
|
||||
// Constraints on rests per week.
|
||||
(0, 1, 2, 7, 2, 3, 4),
|
||||
// At least 1 night shift per week (penalized). At most 4 (hard).
|
||||
(3, 0, 1, 3, 4, 4, 0),
|
||||
};
|
||||
|
||||
// Penalized transitions:
|
||||
// (previous_shift, next_shift, penalty (0 means forbidden))
|
||||
var penalizedTransitions = new (int PreviousShift, int NextShift, int Penalty)[]
|
||||
{
|
||||
// Afternoon to night has a penalty of 4.
|
||||
(2, 3, 4),
|
||||
// Night to morning is forbidden.
|
||||
(3, 1, 0),
|
||||
};
|
||||
|
||||
// daily demands for work shifts (morning, afternon, night) for each day
|
||||
// of the week starting on Monday.
|
||||
var weeklyCoverDemands = new int[][]
|
||||
{
|
||||
new [] {2, 3, 1}, // Monday
|
||||
new [] {2, 3, 1}, // Tuesday
|
||||
new [] {2, 2, 2}, // Wednesday
|
||||
new [] {2, 3, 1}, // Thursday
|
||||
new [] {2, 2, 2}, // Friday
|
||||
new [] {1, 2, 3}, // Saturday
|
||||
new [] {1, 3, 1}, // Sunday
|
||||
};
|
||||
|
||||
// Penalty for exceeding the cover constraint per shift type.
|
||||
var excessCoverPenalties = new[] { 2, 2, 5 };
|
||||
|
||||
var numDays = numWeeks * 7;
|
||||
var numShifts = shifts.Length;
|
||||
|
||||
var model = new CpModel();
|
||||
|
||||
IntVar[,,] work = new IntVar[numEmployees, numShifts, numDays];
|
||||
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
foreach (int s in Range(numShifts))
|
||||
{
|
||||
foreach (int d in Range(numDays))
|
||||
{
|
||||
work[e, s, d] = model.NewBoolVar($"work{e}_{s}_{d}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Linear terms of the objective in a minimization context.
|
||||
var objIntVars = new List<IntVar>();
|
||||
var objIntCoeffs = new List<int>();
|
||||
var objBoolVars = new List<IntVar>();
|
||||
var objBoolCoeffs = new List<int>();
|
||||
|
||||
// Exactly one shift per day.
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
foreach (int d in Range(numDays))
|
||||
{
|
||||
var temp = new IntVar[numShifts];
|
||||
foreach (int s in Range(numShifts))
|
||||
{
|
||||
temp[s] = work[e, s, d];
|
||||
}
|
||||
|
||||
model.Add(temp.Sum() == 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Fixed assignments.
|
||||
foreach (var (e, s, d) in fixedAssignments)
|
||||
{
|
||||
model.Add(work[e, s, d] == 1);
|
||||
}
|
||||
|
||||
// Employee requests
|
||||
foreach (var (e, s, d, w) in requests)
|
||||
{
|
||||
objBoolVars.Add(work[e, s, d]);
|
||||
objBoolCoeffs.Add(w);
|
||||
}
|
||||
|
||||
// Shift constraints
|
||||
foreach (var constraint in shiftConstraints)
|
||||
{
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
var works = new IntVar[numDays];
|
||||
foreach (int d in Range(numDays))
|
||||
{
|
||||
works[d] = work[e, constraint.Shift, d];
|
||||
}
|
||||
|
||||
var (variables, coeffs) = AddSoftSequenceConstraint(
|
||||
model, works,
|
||||
constraint.HardMin, constraint.SoftMin, constraint.MinPenalty,
|
||||
constraint.SoftMax, constraint.HardMax, constraint.MaxPenalty,
|
||||
$"shift_constraint(employee {e}, shift {constraint.Shift}");
|
||||
|
||||
objBoolVars.AddRange(variables);
|
||||
objBoolCoeffs.AddRange(coeffs);
|
||||
}
|
||||
}
|
||||
|
||||
// Weekly sum constraints
|
||||
foreach (var constraint in weeklySumConstraints)
|
||||
{
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
foreach (int w in Range(numWeeks))
|
||||
{
|
||||
var works = new IntVar[numDays];
|
||||
|
||||
foreach (int d in Range(7))
|
||||
{
|
||||
works[d] = work[e, constraint.Shift, d + w * 7];
|
||||
}
|
||||
|
||||
var (variables, coeffs) = AddSoftSumConstraint(
|
||||
model, works,
|
||||
constraint.HardMin, constraint.SoftMin, constraint.MinPenalty,
|
||||
constraint.SoftMax, constraint.HardMax, constraint.MaxPenalty,
|
||||
$"weekly_sum_constraint(employee {e}, shift {constraint.Shift}, week {w}");
|
||||
|
||||
objBoolVars.AddRange(variables);
|
||||
objBoolCoeffs.AddRange(coeffs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Penalized transitions
|
||||
foreach (var penalizedTransition in penalizedTransitions)
|
||||
{
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
foreach (int d in Range(numDays - 1))
|
||||
{
|
||||
var transition = new List<ILiteral>()
|
||||
{
|
||||
work[e, penalizedTransition.PreviousShift, d].Not(),
|
||||
work[e, penalizedTransition.NextShift, d + 1].Not()
|
||||
};
|
||||
|
||||
if (penalizedTransition.Penalty == 0)
|
||||
{
|
||||
model.AddBoolOr(transition);
|
||||
}
|
||||
else
|
||||
{
|
||||
var transVar = model.NewBoolVar($"transition (employee {e}, day={d}");
|
||||
transition.Add(transVar);
|
||||
model.AddBoolOr(transition);
|
||||
objBoolVars.Add(transVar);
|
||||
objBoolCoeffs.Add(penalizedTransition.Penalty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cover constraints
|
||||
foreach (int s in Range(1, numShifts))
|
||||
{
|
||||
foreach (int w in Range(numWeeks))
|
||||
{
|
||||
foreach (int d in Range(7))
|
||||
{
|
||||
var works = new IntVar[numEmployees];
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
works[e] = work[e, s, w * 7 + d];
|
||||
}
|
||||
|
||||
// Ignore off shift
|
||||
var minDemand = weeklyCoverDemands[d][s - 1];
|
||||
var worked = model.NewIntVar(minDemand, numEmployees, "");
|
||||
model.Add(works.Sum() == worked);
|
||||
|
||||
var overPenalty = excessCoverPenalties[s - 1];
|
||||
if (overPenalty > 0)
|
||||
{
|
||||
var name = $"excess_demand(shift={s}, week={w}, day={d}";
|
||||
var excess = model.NewIntVar(0, numEmployees - minDemand, name);
|
||||
model.Add(excess == worked - minDemand);
|
||||
objIntVars.Add(excess);
|
||||
objIntCoeffs.Add(overPenalty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Objective
|
||||
var objBoolSum = objBoolVars.ToArray().ScalProd(objBoolCoeffs.ToArray());
|
||||
var objIntSum = objIntVars.ToArray().ScalProd(objIntCoeffs.ToArray());
|
||||
|
||||
model.Minimize(objBoolSum + objIntSum);
|
||||
|
||||
// Solve model
|
||||
var solver = new CpSolver();
|
||||
|
||||
var solutionPrinter = new ObjectiveSolutionPrinter();
|
||||
var status = solver.SolveWithSolutionCallback(model, solutionPrinter);
|
||||
|
||||
// Print solution
|
||||
if (status == CpSolverStatus.Optimal || status == CpSolverStatus.Feasible)
|
||||
{
|
||||
Console.WriteLine();
|
||||
var header = " ";
|
||||
for (int w = 0; w < numWeeks; w++)
|
||||
{
|
||||
header += "M T W T F S S ";
|
||||
}
|
||||
|
||||
Console.WriteLine(header);
|
||||
|
||||
foreach (int e in Range(numEmployees))
|
||||
{
|
||||
var schedule = "";
|
||||
foreach (int d in Range(numDays))
|
||||
{
|
||||
foreach (int s in Range(numShifts))
|
||||
{
|
||||
if (solver.BooleanValue(work[e, s, d]))
|
||||
{
|
||||
schedule += shifts[s] + " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine($"worker {e}: {schedule}");
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Penalties:");
|
||||
|
||||
foreach (var (i, var) in objBoolVars.Select((x, i) => (i, x)))
|
||||
{
|
||||
if (solver.BooleanValue(var))
|
||||
{
|
||||
var penalty = objBoolCoeffs[i];
|
||||
if (penalty > 0)
|
||||
{
|
||||
Console.WriteLine($" {var.Name()} violated, penalty={penalty}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($" {var.Name()} fulfilled, gain={-penalty}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var (i, var) in objIntVars.Select((x, i) => (i, x)))
|
||||
{
|
||||
if (solver.Value(var) > 0)
|
||||
{
|
||||
Console.WriteLine($" {var.Name()} violated by {solver.Value(var)}, linear penalty={objIntCoeffs[i]}");
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Statistics");
|
||||
Console.WriteLine($" - status : {status}");
|
||||
Console.WriteLine($" - conflicts : {solver.NumConflicts()}");
|
||||
Console.WriteLine($" - branches : {solver.NumBranches()}");
|
||||
Console.WriteLine($" - wall time : {solver.WallTime()}");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters an isolated sub-sequence of variables assigned to True.
|
||||
/// Extract the span of Boolean variables[start, start + length), negate them,
|
||||
/// and if there is variables to the left / right of this span, surround the span by
|
||||
/// them in non negated form.
|
||||
/// </summary>
|
||||
/// <param name="works">A list of variables to extract the span from.</param>
|
||||
/// <param name="start">The start to the span.</param>
|
||||
/// <param name="length">The length of the span.</param>
|
||||
/// <returns>An array of variables which conjunction will be false if the sub-list is
|
||||
/// assigned to True, and correctly bounded by variables assigned to False,
|
||||
/// or by the start or end of works.</returns>
|
||||
static ILiteral[] NegatedBoundedSpan(IntVar[] works, int start, int length)
|
||||
{
|
||||
var sequence = new List<ILiteral>();
|
||||
|
||||
if (start > 0)
|
||||
sequence.Add(works[start - 1]);
|
||||
|
||||
foreach (var i in Range(length))
|
||||
sequence.Add(works[start + i].Not());
|
||||
|
||||
if (start + length < works.Length)
|
||||
sequence.Add(works[start + length]);
|
||||
|
||||
return sequence.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sequence constraint on true variables with soft and hard bounds.
|
||||
/// This constraint look at every maximal contiguous sequence of variables
|
||||
/// assigned to true. If forbids sequence of length < hardMin or > hardMax.
|
||||
/// Then it creates penalty terms if the length is < softMin or > softMax.
|
||||
/// </summary>
|
||||
/// <param name="model">The sequence constraint is built on this model.</param>
|
||||
/// <param name="works">A list of Boolean variables.</param>
|
||||
/// <param name="hardMin">Any sequence of true variables must have a length of at least hardMin.</param>
|
||||
/// <param name="softMin">Any sequence should have a length of at least softMin, or a linear penalty on the delta will be added to the objective.</param>
|
||||
/// <param name="minCost">The coefficient of the linear penalty if the length is less than softMin.</param>
|
||||
/// <param name="softMax">Any sequence should have a length of at most softMax, or a linear penalty on the delta will be added to the objective.</param>
|
||||
/// <param name="hardMax">Any sequence of true variables must have a length of at most hardMax.</param>
|
||||
/// <param name="maxCost">The coefficient of the linear penalty if the length is more than softMax.</param>
|
||||
/// <param name="prefix">A base name for penalty literals.</param>
|
||||
/// <returns>A tuple (costLiterals, costCoefficients) containing the different penalties created by the sequence constraint.</returns>
|
||||
static (IntVar[] costLiterals, int[] costCoefficients) AddSoftSequenceConstraint(CpModel model, IntVar[] works, int hardMin, int softMin, int minCost,
|
||||
int softMax, int hardMax, int maxCost, string prefix)
|
||||
{
|
||||
var costLiterals = new List<IntVar>();
|
||||
var costCoefficients = new List<int>();
|
||||
|
||||
// Forbid sequences that are too short.
|
||||
foreach (var length in Range(1, hardMin))
|
||||
{
|
||||
foreach (var start in Range(works.Length - length - 1))
|
||||
{
|
||||
model.AddBoolOr(NegatedBoundedSpan(works, start, length));
|
||||
}
|
||||
}
|
||||
|
||||
// Penalize sequences that are below the soft limit.
|
||||
|
||||
if (minCost > 0)
|
||||
{
|
||||
foreach (var length in Range(hardMin, softMin))
|
||||
{
|
||||
foreach (var start in Range(works.Length - length - 1))
|
||||
{
|
||||
var span = NegatedBoundedSpan(works, start, length).ToList();
|
||||
var name = $": under_span(start={start}, length={length})";
|
||||
var lit = model.NewBoolVar(prefix + name);
|
||||
span.Add(lit);
|
||||
model.AddBoolOr(span);
|
||||
costLiterals.Add(lit);
|
||||
// We filter exactly the sequence with a short length.
|
||||
// The penalty is proportional to the delta with softMin.
|
||||
costCoefficients.Add(minCost * (softMin - length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Penalize sequences that are above the soft limit.
|
||||
if (maxCost > 0)
|
||||
{
|
||||
foreach (var length in Range(softMax + 1, hardMax + 1))
|
||||
{
|
||||
foreach (var start in Range(works.Length - length - 1))
|
||||
{
|
||||
var span = NegatedBoundedSpan(works, start, length).ToList();
|
||||
var name = $": over_span(start={start}, length={length})";
|
||||
var lit = model.NewBoolVar(prefix + name);
|
||||
span.Add(lit);
|
||||
model.AddBoolOr(span);
|
||||
costLiterals.Add(lit);
|
||||
// Cost paid is max_cost * excess length.
|
||||
costCoefficients.Add(maxCost * (length - softMax));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Just forbid any sequence of true variables with length hardMax + 1
|
||||
foreach (var start in Range(works.Length - hardMax - 1))
|
||||
{
|
||||
var temp = new List<ILiteral>();
|
||||
|
||||
foreach (var i in Range(start, start + hardMax + 1))
|
||||
{
|
||||
temp.Add(works[i].Not());
|
||||
}
|
||||
|
||||
model.AddBoolOr(temp);
|
||||
}
|
||||
|
||||
return (costLiterals.ToArray(), costCoefficients.ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sum constraint with soft and hard bounds.
|
||||
/// This constraint counts the variables assigned to true from works.
|
||||
/// If forbids sum < hardMin or > hardMax.
|
||||
/// Then it creates penalty terms if the sum is < softMin or > softMax.
|
||||
/// </summary>
|
||||
/// <param name="model">The sequence constraint is built on this model.</param>
|
||||
/// <param name="works">A list of Boolean variables.</param>
|
||||
/// <param name="hardMin">Any sequence of true variables must have a length of at least hardMin.</param>
|
||||
/// <param name="softMin">Any sequence should have a length of at least softMin, or a linear penalty on the delta will be added to the objective.</param>
|
||||
/// <param name="minCost">The coefficient of the linear penalty if the length is less than softMin.</param>
|
||||
/// <param name="softMax">Any sequence should have a length of at most softMax, or a linear penalty on the delta will be added to the objective.</param>
|
||||
/// <param name="hardMax">Any sequence of true variables must have a length of at most hardMax.</param>
|
||||
/// <param name="maxCost">The coefficient of the linear penalty if the length is more than softMax.</param>
|
||||
/// <param name="prefix">A base name for penalty literals.</param>
|
||||
/// <returns>A tuple (costVariables, costCoefficients) containing the different
|
||||
/// penalties created by the sequence constraint.</returns>
|
||||
static (IntVar[] costVariables, int[] costCoefficients) AddSoftSumConstraint(CpModel model, IntVar[] works,
|
||||
int hardMin, int softMin, int minCost,
|
||||
int softMax, int hardMax, int maxCost, string prefix)
|
||||
{
|
||||
var costVariables = new List<IntVar>();
|
||||
var costCoefficients = new List<int>();
|
||||
var sumVar = model.NewIntVar(hardMin, hardMax, "");
|
||||
// This adds the hard constraints on the sum.
|
||||
model.Add(sumVar == works.Sum());
|
||||
|
||||
var zero = model.NewIntVar(0, 0, "");
|
||||
|
||||
// Penalize sums below the soft_min target.
|
||||
|
||||
if (softMin > hardMin && minCost > 0)
|
||||
{
|
||||
var delta = model.NewIntVar(-works.Length, works.Length, "");
|
||||
model.Add(delta == (softMin - sumVar));
|
||||
var excess = model.NewIntVar(0, works.Length, prefix + ": under_sum");
|
||||
model.AddMaxEquality(excess, new[] { delta, zero });
|
||||
costVariables.Add(excess);
|
||||
costCoefficients.Add(minCost);
|
||||
}
|
||||
|
||||
// Penalize sums above the soft_max target.
|
||||
if (softMax < hardMax && maxCost > 0)
|
||||
{
|
||||
var delta = model.NewIntVar(-works.Length, works.Length, "");
|
||||
model.Add(delta == sumVar - softMax);
|
||||
var excess = model.NewIntVar(0, works.Length, prefix + ": over_sum");
|
||||
model.AddMaxEquality(excess, new[] { delta, zero });
|
||||
costVariables.Add(excess);
|
||||
costCoefficients.Add(maxCost);
|
||||
}
|
||||
|
||||
return (costVariables.ToArray(), costCoefficients.ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// C# equivalent of Python range (start, stop)
|
||||
/// </summary>
|
||||
/// <param name="start">The inclusive start.</param>
|
||||
/// <param name="stop">The exclusive stop.</param>
|
||||
/// <returns>A sequence of integers.</returns>
|
||||
static IEnumerable<int> Range(int start, int stop)
|
||||
{
|
||||
foreach (var i in Enumerable.Range(start, stop - start))
|
||||
yield return i;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// C# equivalent of Python range (stop)
|
||||
/// </summary>
|
||||
/// <param name="stop">The exclusive stop.</param>
|
||||
/// <returns>A sequence of integers.</returns>
|
||||
static IEnumerable<int> Range(int stop)
|
||||
{
|
||||
return Range(0, stop);
|
||||
}
|
||||
}
|
||||
|
||||
public class ObjectiveSolutionPrinter : CpSolverSolutionCallback
|
||||
{
|
||||
private DateTime _startTime;
|
||||
private int _solutionCount;
|
||||
|
||||
public ObjectiveSolutionPrinter()
|
||||
{
|
||||
_startTime = DateTime.Now;
|
||||
}
|
||||
|
||||
public override void OnSolutionCallback()
|
||||
{
|
||||
var currentTime = DateTime.Now;
|
||||
var objective = ObjectiveValue();
|
||||
var objectiveBound = BestObjectiveBound();
|
||||
var time = currentTime - _startTime;
|
||||
|
||||
Console.WriteLine($"Solution {_solutionCount}, time = {time.TotalSeconds} s, objective = [{objective}, {objectiveBound}]");
|
||||
|
||||
_solutionCount++;
|
||||
}
|
||||
}
|
||||
25
examples/dotnet/ShiftSchedulingSat.csproj
Normal file
25
examples/dotnet/ShiftSchedulingSat.csproj
Normal file
@@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<LangVersion>7.2</LangVersion>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<EnableDefaultItems>false</EnableDefaultItems>
|
||||
<RestoreSources>../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json</RestoreSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<GenerateTailCalls>true</GenerateTailCalls>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="ShiftSchedulingSat.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Google.OrTools" Version="7.0-*" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -552,6 +552,7 @@ test_dotnet_examples_csharp: \
|
||||
rdotnet_JobshopFt06Sat.cs \
|
||||
rdotnet_JobshopSat.cs \
|
||||
rdotnet_NursesSat.cs \
|
||||
rdotnet_ShiftSchedulingSat.cs \
|
||||
rdotnet_SpeakerSchedulingSat.cs \
|
||||
rdotnet_TaskSchedulingSat.cs \
|
||||
rdotnet_cscvrptw.cs \
|
||||
|
||||
Reference in New Issue
Block a user