[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BRK6Y7QXVHJQ3WRM11CD78":3,"skill-same:01M7BRK6Y7QXVHJQ3WRM11CD78":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M7BRK6Y7QXVHJQ3WRM11CD78","simulation-metrics",null,"Use this skill when calculating control system performance metrics such as rise time, overshoot percentage, steady-state error, or settling time for evaluating simulation results.","linyouxue\u002Fskill-repair-benchmark","linyouxue","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F216151464?v=4","01M7BJEVCXKD74KH6FG9CBVSQB","林宥学","01M7BJEVE02NP217V93BKZFC0J",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FHumanAnnotated-Claude-Gold28-20261007\u002Ftasks\u002Fadaptive-cruise-control\u002Frepaired_skill\u002Fsimulation-metrics\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: simulation-metrics\ndescription: Use this skill when calculating control system performance metrics such as rise time, overshoot percentage, steady-state error, or settling time for evaluating simulation results.\n---\n\n# Control System Performance Metrics\n\n## Rise Time\n\nTime for system to go from 10% to 90% of target value.\n\n```python\ndef rise_time(times, values, target):\n    \"\"\"Calculate rise time (10% to 90% of target).\"\"\"\n    t10 = t90 = None\n\n    for t, v in zip(times, values):\n        if t10 is None and v >= 0.1 * target:\n            t10 = t\n        if t90 is None and v >= 0.9 * target:\n            t90 = t\n            break\n\n    if t10 is not None and t90 is not None:\n        return t90 - t10\n    return None\n```\n\n## Overshoot\n\nHow much response exceeds target, as percentage.\n\n```python\ndef overshoot_percent(values, target):\n    \"\"\"Calculate overshoot percentage.\"\"\"\n    max_val = max(values)\n    if max_val \u003C= target:\n        return 0.0\n    return ((max_val - target) \u002F target) * 100\n```\n\n## Steady-State Error\n\nFor a settled constant target, report absolute bias. For tracking a changing reference, evaluate mean absolute error in each steady segment; signed errors must not cancel. Use the same metric and data selection when tuning and when validating the delivered simulation.\n\n```python\ndef steady_state_error(values, target, final_fraction=0.1):\n    \"\"\"Calculate steady-state error using final portion of data.\"\"\"\n    n = len(values)\n    start = int(n * (1 - final_fraction))\n    final_avg = sum(values[start:]) \u002F len(values[start:])\n    return abs(target - final_avg)\n```\n\n## Settling Time\n\nTime to stay within tolerance band of target.\n\n```python\ndef settling_time(times, values, target, tolerance=0.02):\n    \"\"\"Time to settle within tolerance of target.\"\"\"\n    band = target * tolerance\n    lower, upper = target - band, target + band\n\n    settled_at = None\n    for t, v in zip(times, values):\n        if v \u003C lower or v > upper:\n            settled_at = None\n        elif settled_at is None:\n            settled_at = t\n\n    return settled_at\n```\n\n## Usage\n\n```python\ntimes = [row['time'] for row in results]\nvalues = [row['value'] for row in results]\ntarget = 30.0\n\nprint(f\"Rise time: {rise_time(times, values, target)}\")\nprint(f\"Overshoot: {overshoot_percent(values, target)}%\")\nprint(f\"SS Error: {steady_state_error(values, target)}\")\n```\n","# Control System Performance Metrics\n\n## Rise Time\n\nTime for system to go from 10% to 90% of target value.\n\n```python\ndef rise_time(times, values, target):\n    \"\"\"Calculate rise time (10% to 90% of target).\"\"\"\n    t10 = t90 = None\n\n    for t, v in zip(times, values):\n        if t10 is None and v >= 0.1 * target:\n            t10 = t\n        if t90 is None and v >= 0.9 * target:\n            t90 = t\n            break\n\n    if t10 is not None and t90 is not None:\n        return t90 - t10\n    return None\n```\n\n## Overshoot\n\nHow much response exceeds target, as percentage.\n\n```python\ndef overshoot_percent(values, target):\n    \"\"\"Calculate overshoot percentage.\"\"\"\n    max_val = max(values)\n    if max_val \u003C= target:\n        return 0.0\n    return ((max_val - target) \u002F target) * 100\n```\n\n## Steady-State Error\n\nFor a settled constant target, report absolute bias. For tracking a changing reference, evaluate mean absolute error in each steady segment; signed errors must not cancel. Use the same metric and data selection when tuning and when validating the delivered simulation.\n\n```python\ndef steady_state_error(values, target, final_fraction=0.1):\n    \"\"\"Calculate steady-state error using final portion of data.\"\"\"\n    n = len(values)\n    start = int(n * (1 - final_fraction))\n    final_avg = sum(values[start:]) \u002F len(values[start:])\n    return abs(target - final_avg)\n```\n\n## Settling Time\n\nTime to stay within tolerance band of target.\n\n```python\ndef settling_time(times, values, target, tolerance=0.02):\n    \"\"\"Time to settle within tolerance of target.\"\"\"\n    band = target * tolerance\n    lower, upper = target - band, target + band\n\n    settled_at = None\n    for t, v in zip(times, values):\n        if v \u003C lower or v > upper:\n            settled_at = None\n        elif settled_at is None:\n            settled_at = t\n\n    return settled_at\n```\n\n## Usage\n\n```python\ntimes = [row['time'] for row in results]\nvalues = [row['value'] for row in results]\ntarget = 30.0\n\nprint(f\"Rise time: {rise_time(times, values, target)}\")\nprint(f\"Overshoot: {overshoot_percent(values, target)}%\")\nprint(f\"SS Error: {steady_state_error(values, target)}\")\n```\n",{"name":5,"description":7},"main","cdcb6d230f3b15c3c33f8a2bdd16439f43602cbe","evaluation\u002Fresults\u002FHumanAnnotated-Claude-Gold28-20261007\u002Ftasks\u002Fadaptive-cruise-control\u002Frepaired_skill\u002Fsimulation-metrics",1,"https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark","https:\u002F\u002Fgithub.com\u002Flinyouxue","2026-11-14 20:28:35",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add linyouxue\u002Fskill-repair-benchmark --skill simulation-metrics",{"tool":37,"command":38},"bunx","bunx skills add linyouxue\u002Fskill-repair-benchmark --skill simulation-metrics",{"tool":40,"command":41},"pnpm","pnpm dlx skills add linyouxue\u002Fskill-repair-benchmark --skill simulation-metrics","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FHumanAnnotated-Claude-Gold28-20261007\u002Ftasks\u002Fadaptive-cruise-control\u002Frepaired_skill\u002Fsimulation-metrics\u002FSKILL.md",true,[],[46,53,60,67,72,77],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M7E1HGVRY73NBJ022CJG13X6","video-frame-extraction","Extract frames from video files and save them as images using OpenCV","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7E1HAG5R7CJ9C8NYJS771MB","openai-vision","Analyze images and multi-frame sequences using OpenAI GPT vision models","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7E1H7DADKB6QBWKC2KQ63SZ","image-ocr","Extract text content from images using Tesseract OCR via Python, including structured field extraction from receipts and forms","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[],{"skillNo":68,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M7E1H0WBNT43TENGQY7AVZHD","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":73,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7E1GTC7D4N4Q2EF03875J9E","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":78,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7E1GQ92CWFMGH53KSSE4WER","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[]]