2020-09-02 09:42:51 +02:00
<!-- HTML header for doxygen 1.8.18 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv = "Content-Type" content = "text/xhtml;charset=UTF-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=9" / >
2021-01-26 11:28:50 +01:00
< meta name = "generator" content = "Doxygen 1.9.1" / >
2020-09-02 09:42:51 +02:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > OR-Tools: nurses_cp.cc< / title >
< link href = "tabs.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "jquery.js" > < / script >
< script type = "text/javascript" src = "dynsections.js" > < / script >
< link href = "navtree.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "resize.js" > < / script >
< script type = "text/javascript" src = "navtreedata.js" > < / script >
< script type = "text/javascript" src = "navtree.js" > < / script >
< link href = "search/search.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "search/searchdata.js" > < / script >
< script type = "text/javascript" src = "search/search.js" > < / script >
< link href = "doxygen.css" rel = "stylesheet" type = "text/css" / >
< link href = "styleSheet.tmp.css" rel = "stylesheet" type = "text/css" / >
< / head >
< body >
< div id = "top" > <!-- do not remove this div, it is closed by doxygen! -->
< div id = "titlearea" >
< table cellspacing = "0" cellpadding = "0" >
< tbody >
< tr style = "height: 56px;" >
< td id = "projectlogo" > < img alt = "Logo" src = "orLogo.png" / > < / td >
< td id = "projectalign" style = "padding-left: 0.5em;" >
< div id = "projectname" > OR-Tools
2021-04-27 23:00:03 +02:00
  < span id = "projectnumber" > 9.0< / span >
2020-09-02 09:42:51 +02:00
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
<!-- end header part -->
2021-01-26 11:28:50 +01:00
<!-- Generated by Doxygen 1.9.1 -->
2020-09-02 09:42:51 +02:00
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
2021-01-26 11:28:50 +01:00
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
2020-09-02 09:42:51 +02:00
/* @license-end */
< / script >
< script type = "text/javascript" src = "menudata.js" > < / script >
< script type = "text/javascript" src = "menu.js" > < / script >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */< / script >
< div id = "main-nav" > < / div >
< / div > <!-- top -->
< div id = "side-nav" class = "ui-resizable side-nav-resizable" >
< div id = "nav-tree" >
< div id = "nav-tree-contents" >
< div id = "nav-sync" class = "sync" > < / div >
< / div >
< / div >
< div id = "splitbar" style = "-moz-user-select:none;"
class="ui-resizable-handle">
< / div >
< / div >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('nurses_cp_8cc-example.html',''); initResizable(); });
/* @license-end */
< / script >
< div id = "doc-content" >
<!-- window showing the filter options -->
< div id = "MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
< / div >
<!-- iframe showing the search results (closed by default) -->
< div id = "MSearchResultsWindow" >
< iframe src = "javascript:void(0)" frameborder = "0"
name="MSearchResults" id="MSearchResults">
< / iframe >
< / div >
< div class = "header" >
< div class = "headertitle" >
< div class = "title" > nurses_cp.cc< / div > < / div >
< / div > <!-- header -->
< div class = "contents" >
< p > List of constraint solver samples:< / p >
< div class = "fragment" > < div class = "line" > < span class = "comment" > // Copyright 2018 Google LLC< / span > < / div >
< div class = "line" > < span class = "comment" > // Licensed under the Apache License, Version 2.0 (the " License" );< / span > < / div >
< div class = "line" > < span class = "comment" > // you may not use this file except in compliance with the License.< / span > < / div >
< div class = "line" > < span class = "comment" > // You may obtain a copy of the License at< / span > < / div >
< div class = "line" > < span class = "comment" > //< / span > < / div >
< div class = "line" > < span class = "comment" > // http://www.apache.org/licenses/LICENSE-2.0< / span > < / div >
< div class = "line" > < span class = "comment" > //< / span > < / div >
< div class = "line" > < span class = "comment" > // Unless required by applicable law or agreed to in writing, software< / span > < / div >
< div class = "line" > < span class = "comment" > // distributed under the License is distributed on an " AS IS" BASIS,< / span > < / div >
< div class = "line" > < span class = "comment" > // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.< / span > < / div >
< div class = "line" > < span class = "comment" > // See the License for the specific language governing permissions and< / span > < / div >
< div class = "line" > < span class = "comment" > // limitations under the License.< / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "preprocessor" > #include < numeric> < / span > < span class = "comment" > // std::iota< / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "preprocessor" > #include " < a class = "code" href = "base_2logging_8h.html" > ortools/base/logging.h< / a > " < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include " < a class = "code" href = "constraint__solver_8h.html" > ortools/constraint_solver/constraint_solver.h< / a > " < / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "keyword" > namespace < / span > < a class = "code" href = "namespaceoperations__research.html" > operations_research< / a > {< / div >
< div class = "line" > < span class = "keywordtype" > void< / span > SolveNursesExample() {< / div >
< div class = "line" > < span class = "comment" > // Instantiate the solver.< / span > < / div >
< div class = "line" > Solver solver(< span class = "stringliteral" > " NursesExample" < / span > );< / div >
< div class = "line" > std::array< int, 4> nurses;< / div >
< div class = "line" > std::iota(std::begin(nurses), std::end(nurses), 0);< / div >
< div class = "line" > {< / div >
< div class = "line" > std::ostringstream oss;< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > auto< / span > i : nurses) oss < < < span class = "charliteral" > ' ' < / span > < < i;< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a name = "a0" > < / a > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a name = "a1" > < / a > < a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Nurses:" < / span > < < oss.str();< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Nurse assigned to shift 0 means not working that day.< / span > < / div >
< div class = "line" > std::array< int, 4> shifts;< / div >
< div class = "line" > std::iota(std::begin(shifts), std::end(shifts), 0);< / div >
< div class = "line" > {< / div >
< div class = "line" > std::ostringstream oss;< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > auto< / span > i : shifts) oss < < < span class = "charliteral" > ' ' < / span > < < i;< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Shifts:" < / span > < < oss.str();< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > std::array< int, 7> days;< / div >
< div class = "line" > std::iota(std::begin(days), std::end(days), 0);< / div >
< div class = "line" > {< / div >
< div class = "line" > std::ostringstream oss;< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > auto< / span > i : days) oss < < < span class = "charliteral" > ' ' < / span > < < i;< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Days:" < / span > < < oss.str();< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Create shift variables.< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< std::vector< IntVar*> > shifts_matrix(nurses.size());< / div >
< div class = "line" > std::vector< IntVar*> shifts_flat;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
< div class = "line" > std::ostringstream oss;< / div >
< div class = "line" > oss < < < span class = "stringliteral" > " shifts(nurse: " < / span > < < nurse < < < span class = "stringliteral" > " , day: " < / span > < < day < < < span class = "stringliteral" > " )" < / span > ;< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > IntVar* < a name = "a2" > < / a > < a class = "code" href = "expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465" > var< / a > = solver.MakeIntVar(shifts.front(), shifts.back(), oss.str());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > shifts_matrix[nurse].push_back(< a class = "code" href = "expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465" > var< / a > );< / div >
< div class = "line" > shifts_flat.push_back(< a class = "code" href = "expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465" > var< / a > );< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Create nurse variables.< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< std::vector< IntVar*> > nurses_matrix(shifts.size());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > shift : shifts) {< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
< div class = "line" > std::ostringstream oss;< / div >
< div class = "line" > oss < < < span class = "stringliteral" > " nurses(shift: " < / span > < < shift < < < span class = "stringliteral" > " , day: " < / span > < < day < < < span class = "stringliteral" > " )" < / span > ;< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > IntVar* < a class = "code" href = "expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465" > var< / a > = solver.MakeIntVar(nurses.front(), nurses.back(), oss.str());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > nurses_matrix[shift].push_back(< a class = "code" href = "expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465" > var< / a > );< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Set relationships between shifts and nurses.< / span > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< IntVar*> nurses_for_day(shifts.size());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > shift : shifts) {< / div >
< div class = "line" > nurses_for_day[shift] = nurses_matrix[shift][day];< / div >
< div class = "line" > }< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > IntVar* s = shifts_matrix[nurse][day];< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > solver.AddConstraint(< / div >
< div class = "line" > solver.MakeEquality(solver.MakeElement(nurses_for_day, s), nurse));< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Make assignments different on each day i.e.< / span > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
< div class = "line" > < span class = "comment" > // no shift can have two nurses< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< IntVar*> shifts_for_day(nurses.size());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
< div class = "line" > shifts_for_day[nurse] = shifts_matrix[nurse][day];< / div >
< div class = "line" > }< / div >
< div class = "line" > solver.AddConstraint(solver.MakeAllDifferent(shifts_for_day));< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // no nurses can have more than one shifts a day< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< IntVar*> nurses_for_day(shifts.size());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > shift : shifts) {< / div >
< div class = "line" > nurses_for_day[shift] = nurses_matrix[shift][day];< / div >
< div class = "line" > }< / div >
< div class = "line" > solver.AddConstraint(solver.MakeAllDifferent(nurses_for_day));< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Each nurse works 5 or 6 days in a week.< / span > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< IntVar*> nurse_is_working;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
< div class = "line" > nurse_is_working.push_back(< / div >
< div class = "line" > solver.MakeIsGreaterOrEqualCstVar(shifts_matrix[nurse][day], 1));< / div >
< div class = "line" > }< / div >
< div class = "line" > solver.AddConstraint(solver.MakeSumGreaterOrEqual(nurse_is_working, 5));< / div >
< div class = "line" > solver.AddConstraint(solver.MakeSumLessOrEqual(nurse_is_working, 6));< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Create works_shift variables.< / span > < / div >
< div class = "line" > < span class = "comment" > // works_shift_matrix[n][s] is True if< / span > < / div >
< div class = "line" > < span class = "comment" > // nurse n works shift s at least once during the week.< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< std::vector< IntVar*> > works_shift_matrix(nurses.size());< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > shift : shifts) {< / div >
< div class = "line" > std::ostringstream oss;< / div >
< div class = "line" > oss < < < span class = "stringliteral" > " work_shift(nurse: " < / span > < < nurse < < < span class = "stringliteral" > " , shift: " < / span > < < shift < < < span class = "stringliteral" > " )" < / span > ;< / div >
< div class = "line" > works_shift_matrix[nurse].push_back(solver.MakeBoolVar(oss.str()));< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > shift : shifts) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< IntVar*> shift_s_for_nurse;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
< div class = "line" > shift_s_for_nurse.push_back(< / div >
< div class = "line" > solver.MakeIsEqualCstVar(shifts_matrix[nurse][day], shift));< / div >
< div class = "line" > }< / div >
< div class = "line" > solver.AddConstraint(< / div >
< div class = "line" > solver.MakeEquality(works_shift_matrix[nurse][shift],< / div >
< div class = "line" > solver.MakeMax(shift_s_for_nurse)-> Var()));< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // For each shift(other than 0), at most 2 nurses are assigned to that shift< / span > < / div >
< div class = "line" > < span class = "comment" > // during the week.< / span > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (std::size_t shift = 1; shift < shifts.size(); ++shift) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > std::vector< IntVar*> nurses_for_shift;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
< div class = "line" > nurses_for_shift.push_back(works_shift_matrix[nurse][shift]);< / div >
< div class = "line" > }< / div >
< div class = "line" > solver.AddConstraint(solver.MakeSumLessOrEqual(nurses_for_shift, 2));< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // If a nurse works shifts 2 or 3 on,< / span > < / div >
< div class = "line" > < span class = "comment" > // he must also work that shift the previous day or the following day.< / span > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > shift : {2, 3}) {< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > IntVar* v0 = solver.MakeIsEqualVar(nurses_matrix[shift][day],< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > nurses_matrix[shift][(day + 1) % 7]);< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > IntVar* v1 = solver.MakeIsEqualVar(nurses_matrix[shift][(day + 1) % 7],< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > nurses_matrix[shift][(day + 2) % 7]);< / div >
< div class = "line" > solver.AddConstraint(solver.MakeEquality(solver.MakeMax(v0, v1), 1));< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // ----- Search monitors and decision builder -----< / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Create the decision builder.< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > DecisionBuilder* < span class = "keyword" > const< / span > main_phase = solver.MakePhase(< / div >
< div class = "line" > shifts_flat, < a name = "a3" > < / a > < a class = "code" href = "classoperations__research_1_1_solver.html#ab7ab23bc58ea40dc03a5418ddbce7601a1a148a0aaaad7f56eea42df9876e7ae9" > Solver::CHOOSE_FIRST_UNBOUND< / a > , < a name = "a4" > < / a > < a class = "code" href = "classoperations__research_1_1_solver.html#a45c5a2dd0d47110ef5b00408854d8d84a26ee6f4132972f3880a16bf01faf5886" > Solver::ASSIGN_MIN_VALUE< / a > );< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Search log.< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > SearchMonitor* < span class = "keyword" > const< / span > search_log = < span class = "keyword" > nullptr< / span > ;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > SearchLimit* limit = < span class = "keyword" > nullptr< / span > ;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Create the solution collector.< / span > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > SolutionCollector* < span class = "keyword" > const< / span > collector = solver.MakeAllSolutionCollector();< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > collector-> Add(shifts_flat);< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Solve< / span > < / div >
< div class = "line" > solver.Solve(main_phase, search_log, < span class = "keyword" > nullptr< / span > , limit, collector);< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Number of solutions: " < / span > < < collector-> solution_count();< / div >
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " " < / span > ;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Display a few solutions picked at random.< / span > < / div >
< div class = "line" > std::array< int, 4> a_few_solutions = {859, 2034, 5091, 7003};< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > solution : a_few_solutions) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Solution " < / span > < < solution < < < span class = "stringliteral" > " :" < / span > ;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > day : days) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Day " < / span > < < day < < < span class = "stringliteral" > " :" < / span > ;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > nurse : nurses) {< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Nurse " < / span > < < nurse < < < span class = "stringliteral" > " assigned to " < / span > < / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > < < < span class = "stringliteral" > " Task " < / span > < / div >
< div class = "line" > < < collector-> Value(solution,< / div >
< div class = "line" > shifts_flat[nurse * days.size() + day]);< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Advanced usage:" < / span > ;< / div >
< div class = "line" > < a class = "code" href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > (< a class = "code" href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > ) < < < span class = "stringliteral" > " Time: " < / span > < < solver.wall_time() < < < span class = "stringliteral" > " ms" < / span > ;< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > }< / div >
< div class = "line" > } < span class = "comment" > // namespace operations_research< / span > < / div >
< div class = "line" > < / div >
2020-11-18 14:53:30 +01:00
< div class = "line" > < span class = "keywordtype" > int< / span > < a name = "a5" > < / a > < a class = "code" href = "fz_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627" > main< / a > (< span class = "keywordtype" > int< / span > argc, < span class = "keywordtype" > char< / span > ** argv) {< / div >
< div class = "line" > < a name = "a6" > < / a > < a class = "code" href = "namespacegoogle.html#a1749056ff206ebc4f581e6bc0bae841d" > google::InitGoogleLogging< / a > (argv[0]);< / div >
< div class = "line" > absl::SetFlag(& FLAGS_logtostderr, 1);< / div >
2020-09-02 09:42:51 +02:00
< div class = "line" > operations_research::SolveNursesExample();< / div >
< div class = "line" > < span class = "keywordflow" > return< / span > EXIT_SUCCESS;< / div >
< div class = "line" > }< / div >
< div class = "ttc" id = "abase_2logging_8h_html" > < div class = "ttname" > < a href = "base_2logging_8h.html" > logging.h< / a > < / div > < / div >
2021-04-27 23:00:03 +02:00
< div class = "ttc" id = "abase_2logging_8h_html_accad43a85d781d53381cd53a9894b6ae" > < div class = "ttname" > < a href = "base_2logging_8h.html#accad43a85d781d53381cd53a9894b6ae" > LOG< / a > < / div > < div class = "ttdeci" > #define LOG(severity)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "base_2logging_8h_source.html#l00423" > base/logging.h:423< / a > < / div > < / div >
< div class = "ttc" id = "aclassoperations__research_1_1_solver_html_a45c5a2dd0d47110ef5b00408854d8d84a26ee6f4132972f3880a16bf01faf5886" > < div class = "ttname" > < a href = "classoperations__research_1_1_solver.html#a45c5a2dd0d47110ef5b00408854d8d84a26ee6f4132972f3880a16bf01faf5886" > operations_research::Solver::ASSIGN_MIN_VALUE< / a > < / div > < div class = "ttdeci" > @ ASSIGN_MIN_VALUE< / div > < div class = "ttdoc" > Selects the min value of the selected variable.< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "constraint__solver_8h_source.html#l00353" > constraint_solver.h:353< / a > < / div > < / div >
< div class = "ttc" id = "aclassoperations__research_1_1_solver_html_ab7ab23bc58ea40dc03a5418ddbce7601a1a148a0aaaad7f56eea42df9876e7ae9" > < div class = "ttname" > < a href = "classoperations__research_1_1_solver.html#ab7ab23bc58ea40dc03a5418ddbce7601a1a148a0aaaad7f56eea42df9876e7ae9" > operations_research::Solver::CHOOSE_FIRST_UNBOUND< / a > < / div > < div class = "ttdeci" > @ CHOOSE_FIRST_UNBOUND< / div > < div class = "ttdoc" > Select the first unbound variable.< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "constraint__solver_8h_source.html#l00274" > constraint_solver.h:274< / a > < / div > < / div >
2020-09-02 09:42:51 +02:00
< div class = "ttc" id = "aconstraint__solver_8h_html" > < div class = "ttname" > < a href = "constraint__solver_8h.html" > constraint_solver.h< / a > < / div > < / div >
2021-04-27 23:00:03 +02:00
< div class = "ttc" id = "aexpr__array_8cc_html_a472a99923cbe11ae7b5a5d157d9ad465" > < div class = "ttname" > < a href = "expr__array_8cc.html#a472a99923cbe11ae7b5a5d157d9ad465" > var< / a > < / div > < div class = "ttdeci" > IntVar * var< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "expr__array_8cc_source.html#l01874" > expr_array.cc:1874< / a > < / div > < / div >
< div class = "ttc" id = "afz_8cc_html_a3c04138a5bfe5d72780bb7e82a18e627" > < div class = "ttname" > < a href = "fz_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627" > main< / a > < / div > < div class = "ttdeci" > int main(int argc, char **argv)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "fz_8cc_source.html#l00180" > fz.cc:180< / a > < / div > < / div >
2021-01-26 11:28:50 +01:00
< div class = "ttc" id = "alog__severity_8h_html_ab4a2cbab234914b320b7fae11b6e8cb9" > < div class = "ttname" > < a href = "log__severity_8h.html#ab4a2cbab234914b320b7fae11b6e8cb9" > INFO< / a > < / div > < div class = "ttdeci" > const int INFO< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "log__severity_8h_source.html#l00031" > log_severity.h:31< / a > < / div > < / div >
2021-04-27 23:00:03 +02:00
< div class = "ttc" id = "anamespacegoogle_html_a1749056ff206ebc4f581e6bc0bae841d" > < div class = "ttname" > < a href = "namespacegoogle.html#a1749056ff206ebc4f581e6bc0bae841d" > google::InitGoogleLogging< / a > < / div > < div class = "ttdeci" > void InitGoogleLogging(const char *argv0)< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "base_2logging_8cc_source.html#l01873" > base/logging.cc:1873< / a > < / div > < / div >
< div class = "ttc" id = "anamespaceoperations__research_html" > < div class = "ttname" > < a href = "namespaceoperations__research.html" > operations_research< / a > < / div > < div class = "ttdoc" > Collection of objects used to extend the Constraint Solver library.< / div > < div class = "ttdef" > < b > Definition:< / b > < a href = "dense__doubly__linked__list_8h_source.html#l00021" > dense_doubly_linked_list.h:21< / a > < / div > < / div >
2021-01-26 11:28:50 +01:00
< / div > <!-- fragment --> < / div > <!-- contents -->
< / div > <!-- doc - content -->
2020-09-02 09:42:51 +02:00
<!-- HTML footer for doxygen 1.8.18 -->
<!-- start footer part -->
< div id = "nav-path" class = "navpath" > <!-- id is needed for treeview function! -->
< ul >
< li class = "footer" > Generated by
< a href = "http://www.doxygen.org/index.html" >
2021-01-26 11:28:50 +01:00
< img class = "footer" src = "doxygen.png" alt = "doxygen" / > < / a > 1.9.1 < / li >
2020-09-02 09:42:51 +02:00
< / ul >
< / div >
< / body >
< / html >