Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add telecommute status model - #935

Merged
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute
Sep 11, 2025
Merged

Add telecommute status model#935
jpn-- merged 17 commits into
ActivitySim:mainfrom
wsp-sag:explicit_telecommute

Conversation

@i-am-sijia

@i-am-sijiai-am-sijia commented Apr 6, 2025

Copy link
Copy Markdown
Member

This PR adds the software infrastructure to implement a telecommute status model that explicitly identifies workers who telecommute on the simulation day. This work is funded under Phase 9B.

The software adds a is_telecommuting attribute to the persons table. A simple implementation of the telecommute status model can be based on the worker's telecommute frequency. For example, if a worker telecommutes 4 days a week, then there is a 80% probability for them to telecommute on the simulation day. The telecommute status model software can accommodate more complex model forms if needed. An example telecommute status model specification can be found in ActivitySim/sandag-abm3-example#30

In addition to identifying workers who telecommute on the simulation day, we would also like to explicitly simulate their work activities on the day and let that influence non-work activities. The original scope includes overwriting the simulation day work location to home for workers who telecommute on the day, and using the existing ActivitySim mandatory tour generation submodels to simulate in-home work activities. Upon further discussion with the Consortium, we decided to not fully implement the original scope. Therefore this PR does not include the software changes to overwrite the simulation day work location to home.

There are other options to explicitly simulate telecommute behaviors on the simulation day. The Consortium is currently engaged in an explicit telecommute design task to decide the model and software design.

Related issue: #736

@jpn--
jpn-- requested a review from CopilotJuly 17, 2025 18:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a telecommute status model to predict whether workers telecommute on the simulation day. The model extends existing ActivitySim telecommute representation by adding a new binary model that determines daily telecommute behavior based on worker characteristics and telecommute frequency.

Key changes include:

  • Implementation of a new telecommute status model with configurable probability-based logic
  • Addition of documentation explaining model purpose and integration considerations
  • Support for estimation workflow integration

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

FileDescription
docs/dev-guide/components/telecommute_status.mdComprehensive documentation for the telecommute status model component
activitysim/estimation/larch/simple_simulate.pyEstimation support function for telecommute status model
activitysim/abm/models/telecommute_status.pyCore implementation of the telecommute status prediction model
activitysim/abm/models/__init__.pyModule import registration for the new telecommute status component

Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
i-am-sijiaand others added 2 commits July 17, 2025 17:14
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jpn--
jpn-- requested a review from dhensleJuly 24, 2025 18:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This model would be included in our CI test system through the SANDAG example model configs. However, the currently open PR (ActivitySim/sandag-abm3-example#30) does more than just add telecommute status configs. I think the configs in that PR are out of date with what is desired for pulling in this code considering it has changes in CDAP and non-mandatory tour frequency. Do we want to just create a new PR into the sandag-abm3-example for just the telecommute_status configs and leave the rest open for future telecommute enhancements?

Comment threadactivitysim/abm/models/__init__.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threadactivitysim/abm/models/telecommute_status.py Outdated
Comment threaddocs/dev-guide/components/telecommute_status.md Outdated
@jpn--

Copy link
Copy Markdown
Member

@i-am-sijia This PR has some review comments, and also is currently marked as "draft". Can you provide an update on its status?

@i-am-sijia

Copy link
Copy Markdown
MemberAuthor

@dhensle thank you for your review comments! I've addresses the feedback on the main ActivitySim. Regarding your comments on the example SANDAG model specifications:

  • We can revert the changes in CDAP, so that the results remain unchanged and CDAP does not use Telecommute Status model output as an explanatory variable. But this means the new Telecommute Status model will be included in the example SANDAG model for testing purposes, but it's not really used in the model - which is fine.
  • The changes in Non-Mandatory Tour Frequency was due to cosmetically splitting the 2_3_days_week Telecommute Frequency alternative into two separate alternatives (evenly): 2_days_week and 3_days_week [1], as requested by @jfdman during Phase 9B. This adjustment should not change the results of Non-Mandatory Tour Frequency model [2].

Let me know if this sounds acceptable, and I'll proceed with the corresponding changes in the example SANDAG model. Please feel free to share any additional feedback!

@i-am-sijia
i-am-sijia marked this pull request as ready for review August 25, 2025 19:12

@dhensledhensle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks @i-am-sijia!

@jpn--
jpn-- merged commit 51fd5e8 into ActivitySim:mainSep 11, 2025
32 of 36 checks passed
@i-am-sijia
i-am-sijia deleted the explicit_telecommute branch October 27, 2025 15:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@i-am-sijia@jpn--@dhensle@yueshuaing