92 lines
122 KiB
HTML
92 lines
122 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>最优化 | FZU-WIKI</title>
|
||
<meta name="description" content="FZU生存手册">
|
||
<meta name="generator" content="VitePress v1.3.2">
|
||
<link rel="preload stylesheet" href="/assets/style.B9ehgNx8.css" as="style">
|
||
|
||
<script type="module" src="/assets/app.WaHUZV8M.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.C2uBsot4.js">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.DtvhUNIn.js">
|
||
<link rel="modulepreload" href="/assets/技术资源汇总(杭电支持版)_4.人工智能_4.3.4最优化.md.CJEsAZQH.lean.js">
|
||
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8291ffa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8291ffa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar has-sidebar top" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-0ad69264><a class="title" href="/" data-v-0ad69264><!--[--><!--]--><!----><span data-v-0ad69264>FZU-WIKI</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-afb2845e data-v-08fbf4b6><!--[--><span data-v-08fbf4b6>首页</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-afb2845e data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-af5898d3><span class="text" data-v-af5898d3><!----><span data-v-af5898d3>章节</span><span class="vpi-chevron-down text-icon" data-v-af5898d3></span></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-20ed86d6><div class="items" data-v-20ed86d6><!--[--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/技术资源汇总(杭电支持版)/" data-v-f51f088d><!--[-->1. 前言<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/2.%E9%AB%98%E6%95%88%E5%AD%A6%E4%B9%A0/2.%E9%AB%98%E6%95%88%E5%AD%A6%E4%B9%A0.html" data-v-f51f088d><!--[-->2. 高效学习<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA.html" data-v-f51f088d><!--[-->3. 编程思维体系构建<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD.html" data-v-f51f088d><!--[-->4. 人工智能<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/5.%E5%AF%8C%E6%9C%89%E7%94%9F%E5%91%BD%E7%9A%84%E5%B5%8C%E5%85%A5%E5%BC%8F/5.%E5%AF%8C%E6%9C%89%E7%94%9F%E5%91%BD%E7%9A%84%E5%B5%8C%E5%85%A5%E5%BC%8F.html" data-v-f51f088d><!--[-->5. 富有生命的嵌入式<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/6.%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%AE%89%E5%85%A8/6.%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%AE%89%E5%85%A8.html" data-v-f51f088d><!--[-->6. 计算机安全<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/7.%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/7.%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91.html" data-v-f51f088d><!--[-->7. 网络应用开发<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/8.%E5%9F%BA%E7%A1%80%E5%AD%A6%E7%A7%91/8.%E5%9F%BA%E7%A1%80%E5%AD%A6%E7%A7%91.html" data-v-f51f088d><!--[-->8. 基础学科<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/9.%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/9.%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html" data-v-f51f088d><!--[-->9. 计算机网络<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://gitea.xinxijishubu.asia/moyin/fzu-product" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-af5898d3><span class="vpi-more-horizontal icon" data-v-af5898d3></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://gitea.xinxijishubu.asia/moyin/fzu-product" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-883964e0><button data-v-883964e0>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-edd2eed8><!----><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/%E5%86%85%E5%AE%B9%E7%B4%A2%E5%BC%95.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>返回上一层</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible has-active" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>4.人工智能</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.人工智能</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.1%E5%89%8D%E8%A8%80.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.1前言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.2%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%EF%BC%88AI%EF%BC%89%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%EF%BC%88quick%20start%EF%BC%89.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.2机器学习(AI)快速入门(quick start)</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible has-active" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>4.3人工智能导论及机器学习入门</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%AF%BC%E8%AE%BA%E5%8F%8A%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%85%A5%E9%97%A8.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3人工智能导论及机器学习入门</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>4.3.1搜索</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.1%E6%90%9C%E7%B4%A2.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.1搜索</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.1.1%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B%E2%80%94%E2%80%94maze%E8%BF%B7%E5%AE%AB%E8%A7%A3%E6%90%9C%E7%B4%A2.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.1.1程序示例——maze迷宫解搜索</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.1.2%E9%A1%B9%E7%9B%AE%EF%BC%9ATic-Tac-Toe%E4%BA%95%E5%AD%97%E6%A3%8B.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.1.2项目:Tic-Tac-Toe井字棋</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>4.3.2知识推理</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.2%E7%9F%A5%E8%AF%86%E6%8E%A8%E7%90%86.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.2知识推理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.2.1%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B%E2%80%94%E2%80%94%E5%91%BD%E9%A2%98%E9%80%BB%E8%BE%91%E4%B8%8E%E6%A8%A1%E5%9E%8B%E6%A3%80%E6%B5%8B.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.2.1程序示例——命题逻辑与模型检测</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.2.2%E9%A1%B9%E7%9B%AE%EF%BC%9A%E6%89%AB%E9%9B%B7%EF%BC%8C%E9%AA%91%E5%A3%AB%E4%B8%8E%E6%B5%81%E6%B0%93%E9%97%AE%E9%A2%98.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.2.2项目:扫雷,骑士与流氓问题</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>4.3.3不确定性问题</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.3%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7%E9%97%AE%E9%A2%98.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.3不确定性问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.3.1%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.3.1程序示例</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.3.2%E9%A1%B9%E7%9B%AE%EF%BC%9A%E9%81%97%E4%BC%A0.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.3.2项目:遗传</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 collapsible has-active" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>4.3.4最优化</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.4%E6%9C%80%E4%BC%98%E5%8C%96.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.4最优化</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.4.1%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.4.1程序示例</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.4.2%E9%A1%B9%E7%9B%AE%EF%BC%9A%E5%A1%AB%E8%AF%8D%E6%B8%B8%E6%88%8F.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.3.4.2项目:填词游戏</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.4FAQ%EF%BC%9A%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.4FAQ:常见问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.5%E5%9B%BE%E7%BD%91%E7%BB%9C%E7%95%A5%E8%BF%B0%EF%BC%88intro&GCN%EF%BC%89.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.5图网络略述(intro&GCN)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.6%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.6数据分析</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.7%E5%A6%82%E4%BD%95%E5%81%9A%E7%A0%94%E7%A9%B6.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.7如何做研究</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.8%E7%A7%91%E7%A0%94%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.8科研论文写作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.9%E4%BB%8E%20AI%20%E5%88%B0%20%E6%99%BA%E8%83%BD%E7%B3%BB%E7%BB%9F%20%E2%80%94%E2%80%94%20%E4%BB%8E%20LLMs%20%E5%88%B0%20Agents.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.10LLMAgent%E4%B9%8B%E7%BB%93%E6%9E%84%E5%8C%96%E8%BE%93%E5%87%BA.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.10LLM Agent之结构化输出</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.11%E6%9C%AC%E7%AB%A0%E8%8A%82%E5%86%85%E5%AE%B9%E7%9A%84%E5%B1%80%E9%99%90%E6%80%A7.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>4.11本章节内容的局限性</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)_4_%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD_4_3_4%E6%9C%80%E4%BC%98%E5%8C%96 external-link-icon-enabled" data-v-e6f2a212><div><h1 id="最优化" tabindex="-1">最优化 <a class="header-anchor" href="#最优化" aria-label="Permalink to "最优化""></a></h1><p>最优化是指从一组可能的选项中选择最佳选项。我们已经遇到过试图找到最佳选项的问题,比如在极大极小算法中,今天我们将学习一些工具,可以用来解决更广泛的问题。</p><h2 id="局部搜索-local-search" tabindex="-1">局部搜索 (Local Search) <a class="header-anchor" href="#局部搜索-local-search" aria-label="Permalink to "局部搜索 (Local Search)""></a></h2><p>局部搜索是一种保持单一节点并通过移动到邻近的节点进行搜索的搜索算法。这种类型的算法与我们之前看到的搜索类型不同。例如,在解决迷宫的过程中,我们想找到通往目标的最快捷的方法,而局部搜索则对寻找问题的最佳答案感兴趣。通常情况下,局部搜索会带来一个不是最佳但 "足够好 "的答案,以节省计算能力。考虑一下下面这个局部搜索问题的例子:我们有四所房子在设定的位置。我们想建两所医院,使每所房子到医院的距离最小。这个问题可以形象地描述如下:</p><p><img src="https://cdn.xyxsw.site/4.3.4-0.png" alt="4.3.4-0"></p><p>在这幅图中,我们看到的是房屋和医院的可能配置。它们之间的距离是用曼哈顿距离 (向上、向下和向两侧移动的次数;在<a href="./4.3.1搜索.html">搜索</a> 中详细讨论) 来衡量的,从每个房子到最近的医院的距离之和是 17。我们称其为成本 <strong>(cost)</strong>,因为我们试图使这个距离最小化。在这种情况下,一个状态将是房屋和医院的任何一个配置。</p><p>把这个概念抽象化,我们可以把每一种房屋和医院的配置表现为下面的状态空间图。图中的每一条都代表一个状态的值,在我们的例子中,它是房屋和医院配置的成本。</p><p><img src="https://cdn.xyxsw.site/4.3.4-1.png" alt="4.3.4-1"></p><p>从这个可视化的角度来看,我们可以为我们接下来的讨论定义几个重要的术语:</p><ul><li>目标函数 <strong>(Objective Function)</strong> 是一个函数,我们用它来最大化解决方案的值。</li><li>成本函数 <strong>(Cost Function)</strong> 是一个我们用来最小化解决方案成本的函数 (这就是我们在房屋和医院的例子中要使用的函数。我们想要最小化从房屋到医院的距离)。</li><li>当前状态 <strong>(Current State)</strong> 是指函数目前正在考虑的状态。</li><li>邻居状态 <strong>(Neighbor State)</strong> 是当前状态可以过渡到的一个状态。在上面的一维状态空间图中,邻居状态是指当前状态两侧的状态。在我们的例子中,邻居状态可以是将其中一家医院向任何方向移动一步所产生的状态。邻居状态通常与当前状态相似,因此,其值与当前状态的值接近。</li></ul><p>请注意,局部搜索算法的工作方式是考虑当前状态下的一个节点,然后将该节点移动到当前状态的一个邻节点处。这与极大极小算法不同,例如,在极大极小算法中,状态空间中的每一个状态都被递归地考虑。</p><h2 id="爬山算法-hill-climbing" tabindex="-1">爬山算法 (Hill Climbing) <a class="header-anchor" href="#爬山算法-hill-climbing" aria-label="Permalink to "爬山算法 (Hill Climbing)""></a></h2><p>爬山算法是局部搜索算法的一种类型。在这个算法中,邻居的状态与当前的状态进行比较,如果其中任何一个状态更好,我们就把当前的节点从当 - 的状态改为该邻居的状态。“好状态”的定义是由目标函数决定的,倾向于一个较高的值,或一个递减函数,倾向于一个较低的值。</p><p>一个爬山算法在伪代码中会有以下样子:</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>function Hill-Climb(problem):</span></span>
|
||
<span class="line"><span> current = initial state of problem</span></span>
|
||
<span class="line"><span> repeat:</span></span>
|
||
<span class="line"><span> neighbor = best valued neighbor of current</span></span>
|
||
<span class="line"><span> if neighbor not better than current:</span></span>
|
||
<span class="line"><span> return current</span></span>
|
||
<span class="line"><span> current = neighbor</span></span></code></pre></div><p>在这个算法中,我们从一个当前状态开始。在一些问题中,我们会知道当前的状态是什么,而在其他问题中,我们将不得不从随机选择一个状态开始。然后,我们重复以下动作:我们评估邻居状态,选择一个具有最佳值的邻居状态。然后,我们将这个邻居状态的值与当前状态的值进行比较。如果邻居状态更好,我们将当前状态切换到邻居状态,然后重复这个过程。当我们将最佳邻居与当前状态进行比较,并且当前状态更好时,该过程就结束了。然后,我们返回当前状态。</p><p>使用爬山算法,我们可以开始改进我们在例子中分配给医院的位置。经过几次转换,我们得到了以下状态:</p><p><img src="https://cdn.xyxsw.site/4.3.4-2.png" alt="4.3.4-2"></p><p>在这个状态下,成本是 11,比初始状态的成本 17 有所提高。然而,这还不是最佳状态。例如,将左边的医院移到左上角的房子下面,会使成本达到 9,比 11 好。然而,这个版本的爬山算法无法达到这个目标,因为所有的邻居状态都至少和当前状态的成本一样高。从这个意义上说,爬坡算法是短视的,它经常满足于比其他一些解决方案更好的解决方案,但不一定是所有可能的解决方案中最好的。</p><h3 id="局部和全局最小值和最大值" tabindex="-1">局部和全局最小值和最大值 <a class="header-anchor" href="#局部和全局最小值和最大值" aria-label="Permalink to "局部和全局最小值和最大值""></a></h3><p>如上所述,爬山算法可能卡在局部最大值或最小值中。局部最大值是一个比其相邻状态有更高值的状态。而全局最大值是指在状态空间的所有状态中具有最高值的状态。</p><p><img src="https://cdn.xyxsw.site/4.3.4-3.png" alt="4.3.4-3"></p><p>相比之下,局部最小值是一个比其相邻状态的值更低的状态。与此相对,全局最小值是指在状态空间中所有状态中具有最低值的状态。</p><p><img src="https://cdn.xyxsw.site/4.3.4-4.png" alt="4.3.4-4"></p><p>爬山算法的问题是,它们可能会在局部最小和最大中结束。一旦算法到达一个点,其邻居状态就目标函数而言,比当前状态更糟糕,算法就会停止。特殊类型的局部最大值和最小值包括平坦的局部最大值/最小值 <strong>(flat local maximum/minimum)</strong>,即多个数值相同的状态相邻,形成一个plateau,其邻居状态的数值更差;以及 <strong>shoulder</strong>,邻居状态既可以更好,也可以更差。从 plateau 的中间开始,算法将无法向任何方向推进。</p><p><img src="https://cdn.xyxsw.site/4.3.4-5.png" alt="4.3.4-5"></p><h3 id="爬山算法的变体" tabindex="-1">爬山算法的变体 <a class="header-anchor" href="#爬山算法的变体" aria-label="Permalink to "爬山算法的变体""></a></h3><p>由于爬山算法的局限性,人们想到了多种变体来克服卡在局部最小值和最大值的问题。该算法的所有变体的共同点是,无论采用何种策略,每一种变体都有可能陷入局部最小或最大,并且没有办法继续优化。下面的算法是这样表述的:数值越大越好,但它们也适用于成本函数,其目标是使成本最小化。</p><ul><li><strong>Steepest-ascent</strong>: 选择值最高的邻居状态。</li><li>Stochastic: 从值较高的邻居状态中随机选择。这样做,我们选择去任何比我们的值更高的方向。</li><li><strong>First-choice</strong>: 选择第一个值较高的邻居状态。</li><li><strong>Random-restart</strong>: 进行多次爬山。每次都从一个随机状态开始。比较每次试验的最大值,并在这些最大值中选择一个。</li><li><strong>Local Beam Search</strong>: 选择值最高的 k 个邻居状态。这与大多数本地搜索算法不同,它使用多个节点进行搜索,而不是只有一个节点。</li></ul><p>虽然局部搜索算法并不总是给出最好的解决方案,但在考虑所有可能的状态在计算上不可行的情况下,它们往往能给出足够好的解决方案。</p><h2 id="模拟退火算法-simulated-annealing" tabindex="-1">模拟退火算法 (Simulated Annealing) <a class="header-anchor" href="#模拟退火算法-simulated-annealing" aria-label="Permalink to "模拟退火算法 (Simulated Annealing)""></a></h2><p>尽管我们已经看到了可以改进爬山算法的变种,但它们都有一个共同的错误:一旦算法达到局部最大值,它就会停止运行。模拟退火算法允许算法在卡在局部最大值时"摆脱"自己。</p><p>退火是指加热金属并让其缓慢冷却的过程,其作用是使金属变硬。这被用来比喻模拟退火算法,该算法开始时温度较高,更有可能做出随机决定,随着温度的降低,它变得不太可能做出随机决定,变得更加"坚定"。这种机制允许算法将其状态改变为比当前状态更差的邻居状态,这就是它如何摆脱局部最大值的原因。以下是模拟退火法的伪代码:</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>function Simulated-Annealing(problem, max):</span></span>
|
||
<span class="line"><span> current = initial state of problem</span></span>
|
||
<span class="line"><span> for t = 1 to max:</span></span>
|
||
<span class="line"><span> T = Temperature(t)</span></span>
|
||
<span class="line"><span> neighbor = random neighbor of current</span></span>
|
||
<span class="line"><span> ΔE = how much better neighbor is than current</span></span>
|
||
<span class="line"><span> if ΔE > 0:</span></span>
|
||
<span class="line"><span> current = neighbor</span></span>
|
||
<span class="line"><span> with probability e^(ΔE/T) set current = neighbor</span></span>
|
||
<span class="line"><span> return current</span></span></code></pre></div><p>该算法将一个<code>problem</code>和<code>max</code>作为输入,<code>max</code>是它应该重复的次数。对于每个迭代,<code>T</code>是用一个<code>Temperature</code>函数来设置的。这个函数在早期迭代中返回一个较高的值 (当<code>t</code>较低时),在后期迭代中返回一个较低的值 (当<code>t</code>较高时)。然后,随机选择一个邻居状态,并计算<code>ΔE</code>,使其量化邻居状态比当前状态好的程度。如果邻居状态比当前状态好 (<code>ΔE>0</code>),像以前一样,我们将当前状态设置为邻居状态。然而,当邻居状态较差时 (<code>ΔE<0</code>),我们仍然可能将我们的当前状态设置为该邻居状态,并且我们以$e^{ΔE/t}$的概率这样做。这里的意思是,更小的<code>ΔE</code>将导致邻居状态被选择的概率降低,而温度<code>t</code>越高,邻居状态被选择的概率越高。这意味着邻居状态越差,被选择的可能性就越小,而算法在其过程中越早,就越有可能将一个较差的邻居状态设置为当前状态。这背后的数学原理如下:<code>e</code>是一个常数 (大约 2.72),<code>ΔE</code>是负数 (因为这个邻居比当前状态更糟糕)。温度<code>t</code>越高,ΔE/<code>t</code>就越接近于 0,使概率更接近于 1。</p><h3 id="旅行商问题-traveling-salesman-problem" tabindex="-1">旅行商问题 (Traveling Salesman Problem) <a class="header-anchor" href="#旅行商问题-traveling-salesman-problem" aria-label="Permalink to "旅行商问题 (Traveling Salesman Problem)""></a></h3><p>在旅行商问题中,任务是连接所有的点,同时选择最短的距离。例如,这就是快递公司需要做的事情:找到从商店到所有客户家的最短路线,然后再返回。</p><table tabindex="0"><thead><tr><th>优化前</th><th>优化后</th></tr></thead><tbody><tr><td><img src="https://cdn.xyxsw.site/4.3.4-6.png" alt="4.3.4-6"></td><td><img src="https://cdn.xyxsw.site/4.3.4-7.png" alt="4.3.4-7"></td></tr></tbody></table><p>在这种情况下,邻居状态可以被看作是两个箭头互换位置的状态。计算每一个可能的组合使得这个问题在计算上要求很高 (10 个点给了我们 10! 或者说 3,628,800 条可能的路线)。通过使用模拟退火算法,可以以较低的计算成本找到一个好的解决方案。</p><h2 id="线性规划-linear-programming" tabindex="-1">线性规划 (Linear Programming) <a class="header-anchor" href="#线性规划-linear-programming" aria-label="Permalink to "线性规划 (Linear Programming)""></a></h2><p>线性规划是一个优化线性方程 (y=ax₁+bx₂+...形式的方程) 的问题系列。</p><p>线性规划有以下内容:</p><ul><li>一个我们想要最小化的成本函数:c₁x₁ + c₂x₂ + ... + cₙxₙ。这里,每个 x 是一个变量,它与一些成本 c 相关联。</li><li>一个约束条件,它表示为一个变量的总和,它要么小于或等于一个值 (a₁x₁+a₂x₂+...+aₙxₙ≤b),要么正好等于这个值 (a₁x₁+a₂x₂+...+aₙxₙ=b)。在这种情况下,x 是一个变量,a 是与之相关的一些资源,而 b 是我们可以为这个问题投入多少资源。</li><li>变量的域 (例如,一个变量不能是负数),形式为 lᵢ≤xᵢ≤uᵢ。</li></ul><p>请考虑以下例子:</p><ul><li>两台机器,X₁和 X₂。X₁的运行成本为 50 美元/小时,X₂的运行成本为 80 美元/小时。我们的目标是使成本最小化。这可以被表述为一个成本函数:50x₁+80x₂。</li><li>X₁每小时需要 5 个单位的劳动力。X₂每小时需要 2 个单位的劳动力。总共需要花费 20 个单位的劳动力。这可以被形式化为一个约束条件:5x₁ + 2x₂ ≤ 20。</li><li>X₁每小时生产 10 个单位的产品。X₂每小时生产 12 个单位的产品。公司需要 90 个单位的产出。这是另一个约束条件。从字面上看,它可以被改写为 10x₁+12x₂≥90。然而,约束条件必须是 (a₁x₁+a₂x₂+...+aₙxₙ≤b) 或 (a₁x₁+a₂x₂+...+aₙxₙ=b)。因此,我们乘以 (-1),得到一个所需形式的等价方程:(-10x₁)+(-12x₂)≤-90。</li></ul><p>线性规划的优化算法需要几何学和线性代数的背景知识,而我们并不想假设这些知识。相反,我们可以使用已经存在的算法,如 Simplex 和 Interior-Point。</p><p>下面是一个使用 Python 中 scipy 库的线性规划例子:</p><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> scipy.optimize</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Objective Function: 50x_1 + 80x_2</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Constraint 1: 5x_1 + 2x_2 <= 20</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Constraint 2: -10x_1 + -12x_2 <= -90</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> scipy.optimize.linprog(</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">50</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">80</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Cost function: 50x_1 + 80x_2</span></span>
|
||
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> A_ub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">5</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], [</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">12</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]], </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Coefficients for inequalities</span></span>
|
||
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> b_ub</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">20</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">90</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Constraints for inequalities: 20 and -90</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result.success:</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"X1: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{round</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(result.x[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> hours"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"X2: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{round</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(result.x[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> hours"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> print</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"No solution"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div><h2 id="约束满足-constraint-satisfaction" tabindex="-1">约束满足(Constraint Satisfaction) <a class="header-anchor" href="#约束满足-constraint-satisfaction" aria-label="Permalink to "约束满足(Constraint Satisfaction)""></a></h2><p>约束满足问题是一类需要在满足某些条件下为变量赋值的问题。</p><p>约束条件满足问题具有一下特性:</p><ul><li>变量集合{x₁,x₂,...,xₙ}。</li><li>每个变量域的集合{D₁, D₂, ..., Dₙ}。</li><li>一组约束条件 C</li></ul><p>数独可以表示为一个约束满足问题,每个空方块是一个变量,域是数字 1-9,而约束是不能彼此相等的方块。</p><p><img src="https://cdn.xyxsw.site/4.3.4-8.png" alt="4.3.4-8"></p><p>再考虑一个例子。每个学生 1-4 都在选修 A、B、...、G 中的三门课程。每门课程都需要有考试,可能的考试日是星期一、星期二和星期三。但是,同一个学生不能在同一天有两次考试。在这种情况下,变量是课程,域是天数,约束条件是哪些课程不能在同一天安排考试,因为是同一个学生在考试。这可以直观地显示如下:</p><p><img src="https://cdn.xyxsw.site/4.3.4-9.png" alt="4.3.4-9"></p><p>这个问题可以用约束条件来解决,约束条件用图来表示。图中的每个节点是一门课程,如果两门课程不能安排在同一天,则在它们之间画一条边。在这种情况下,该图看起来是这样的:</p><p><img src="https://cdn.xyxsw.site/4.3.4-10.png" alt="4.3.4-10"></p><p>关于约束满足问题,还有几个值得了解的术语:</p><ul><li>硬约束 (Hard Constraint) 是指在一个正确的解决方案中必须满足的约束。</li><li>软约束 (Soft Constraint) 是一种约束,表示哪种解决方案比其他解决方案更受欢迎。</li><li>一元约束 (Unary Constraint) 是指只涉及一个变量的约束。在我们的例子中,一元约束是指课程 A 在周一不能有考试{A≠周一}。</li><li>二元约束 (Binary Constraint) 是一种涉及两个变量的约束。这就是我们在上面的例子中使用的约束类型,表示两个课程不能有相同的值{A ≠ B}。</li></ul><h3 id="节点一致性-node-consistency" tabindex="-1">节点一致性 (Node Consistency) <a class="header-anchor" href="#节点一致性-node-consistency" aria-label="Permalink to "节点一致性 (Node Consistency)""></a></h3><p>节点一致性是指一个变量域中的所有值都满足该变量的一元约束。</p><p>例如,让我们拿两门课程,A 和 B。每门课程的域是{Monday, Tuesday, Wednesday},约束条件是{A≠Mon,B≠Tue,B≠Mon,A≠B}。现在,A 和 B 都不是一致的,因为现有的约束条件使它们不能取其域中的每一个值。然而,如果我们从 A 的域中移除 Monday,那么它就会有节点一致性。为了实现 B 的节点一致性,我们必须从它的域中删除 Monday 和 Tuesday。</p><h3 id="弧一致性-arc-consistency" tabindex="-1">弧一致性 (Arc Consistency) <a class="header-anchor" href="#弧一致性-arc-consistency" aria-label="Permalink to "弧一致性 (Arc Consistency)""></a></h3><p>弧一致性是指一个变量域中的所有值都满足该变量的二元约束 (注意,我们现在用"弧"来指代我们以前所说的 "边")。换句话说,要使 X 对 Y 具有弧一致性,就要从 X 的域中移除元素,直到 X 的每个选择都有 Y 的可能选择。</p><p>考虑到我们之前的例子,修改后的域:A:{Tuesday, Wednesday}和 B:{Wednesday}。如果 A 与 B 是弧一致的,那么无论 A 的考试被安排在哪一天 (从它的域来看),B 仍然能够安排考试。A 与 B 是弧一致的吗?如果 A 取值为 Tuesday,那么 B 可以取值为 Wednesday。然而,如果 A 取值为 Wednesday,那么就没有 B 可以取的值 (记住,其中一个约束是 A≠B)。因此,A 与 B 不是弧一致的。为了改变这种情况,我们可以从 A 的域中删除 Wednesday。然后,A 的任何取值 (Tuesday 是唯一的选择) 都会给 B 留下一个取值 (Wednesday)。现在,A 与 B 是弧一致的。让我们看看一个伪代码的算法,使一个变量相对于其他变量是弧一致的 (注意,csp 代表 "约束满足问题")。</p><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">function Revise(csp, X, Y):</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> revised </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> false</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> x </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> X.domain:</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> no y </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Y.domain satisfies constraint </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (X,Y):</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> delete x </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> X.domain</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> revised = true</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> revised</span></span></code></pre></div><p>这个算法从跟踪 X 的域是否有任何变化开始,使用变量 revised,这在我们研究的下一个算法中会很有用。然后,代码对 X 的域中的每一个值进行重复,看看 Y 是否有一个满足约束条件的值。如果是,则什么都不做,如果不是,则从 X 的域中删除这个值。</p><p>通常情况下,我们感兴趣的是使整个问题的弧一致,而不仅仅是一个变量相对于另一个变量的一致性。在这种情况下,我们将使用一种叫做 AC-3 的算法,该算法使用 Revise:</p><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">function </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">AC</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">3</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(csp):</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> queue </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> all</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> arcs </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> csp</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> while</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> queue non</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">empty:</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (X, Y) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Dequeue(queue)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Revise(csp, X, Y):</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> size of X.domain </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> false</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> each Z </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> X.neighbors </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {Y}:</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Enqueue(queue, (Z,X))</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> true</span></span></code></pre></div><p>该算法将问题中的所有弧添加到一个队列中。每当它考虑一个弧时,它就把它从队列中删除。然后,它运行 Revise 算法,看这个弧是否一致。如果做了修改使其一致,则需要进一步的行动。如果得到的 X 的域是空的,这意味着这个约束满足问题是无法解决的 (因为没有任何 X 可以取的值会让 Y 在约束条件下取任何值)。如果问题在上一步中没有被认为是不可解决的,那么,由于 X 的域被改变了,我们需要看看与 X 相关的所有弧是否仍然一致。也就是说,我们把除了 Y 以外的所有 X 的邻居,把他们和 X 之间的弧添加到队列中。然而,如果 Revise 算法返回 false,意味着域没有被改变,我们只需继续考虑其他弧。</p><p>虽然弧一致性的算法可以简化问题,但不一定能解决问题,因为它只考虑了二元约束,而没有考虑多个节点可能的相互连接方式。我们之前的例子中,4个学生中的每个人都在选修3门课程,对其运行AC-3后,仍然没有变化。</p><p>我们讲过<a href="./4.3.1搜索.html">搜索</a>问题。一个约束满足问题可以被看作是一个搜索问题:</p><ul><li>初始状态 (Initial state):空赋值 (所有变量都没有分配任何数值)。</li><li>动作 (Action):在赋值中加入一个{变量=值};也就是说,给某个变量一个值。</li><li>过渡模型 (Transition model):显示添加赋值如何改变变量。这没有什么深度:过渡模型返回包括最新动作后的赋值的状态。</li><li>目标测试 (Goal test):检查所有变量是否被赋值,所有约束条件是否得到满足。</li><li>路径成本函数 (Path cost function):所有路径的成本都是一样的。正如我们前面提到的,与典型的搜索问题相比,优化问题关心的是解决方案,而不是通往解决方案的路线。</li></ul><p>然而,把约束满足问题作为一个普通的搜索问题来处理,是非常低效的。相反,我们可以利用约束满足问题的结构来更有效地解决它。</p><h3 id="回溯搜索-backtracking-search" tabindex="-1">回溯搜索 (Backtracking Search) <a class="header-anchor" href="#回溯搜索-backtracking-search" aria-label="Permalink to "回溯搜索 (Backtracking Search)""></a></h3><p>回溯搜索是一种考虑约束满足搜索问题结构的搜索算法。一般来说,它是一个递归函数,只要值满足约束,它就会尝试继续赋值。如果违反了约束,它将尝试不同的赋值。让我们看看它的伪代码:</p><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">function Backtrack(assignment, csp):</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment complete:</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> var </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Select</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Unassigned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Var(assignment, csp)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Domain</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Values(var, assignment, csp):</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value consistent </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment:</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> add {var = value} to assignment</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Backtrack(assignment, csp)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result ≠ failure:</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> remove {var = value} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> failure</span></span></code></pre></div><p>换句话说,如果当前赋值完成,则该算法返回当前赋值。这意味着,如果完成了算法,它将不会执行任何额外的操作,它只会返回已成立的赋值。如果赋值不完整,算法会选择任何尚未赋值的变量。然后,算法尝试为变量赋值,并对结果赋值再次运行回溯算法(递归)。然后,它检查结果值。如果不是失败,则表示赋值已完成,并且应返回此赋值。如果结果值失败,则删除最近的赋值,并尝试新的可能值,重复相同的过程。如果域中所有可能的值都返回失败,这意味着我们需要回溯。也就是说,问题出在之前的一些作业上。如果这种情况发生在我们开始使用的变量上,那么这意味着没有解决方案满足约束。</p><p>考虑以下行动方案:</p><p><img src="https://cdn.xyxsw.site/4.3.4-11.png" alt="4.3.4-11"></p><p>我们从空赋值开始。然后,我们选择变量 A,并给它赋值<code>Mon</code>。然后,使用这个赋值,我们再次运行算法。既然 A 已经有了一个赋值,算法将考虑 B,并将<code>Mon</code>赋值给它。此赋值返回<code>false</code>,因此算法将尝试在<code>Tue</code>为 B 赋值,而不是在给定上一个赋值的情况下为 C 赋值。这个新的赋值满足约束条件,在给定这个赋值的情况下,下一步将考虑一个新的变量。例如,如果将<code>Tue</code>或<code>Wed</code>也赋值给 B 会导致失败,那么算法将回溯并返回到考虑 A,为其分配另一个值,即<code>Tue</code>。如果<code>Tue</code>和<code>Wed</code>也失败了,那么这意味着我们已经尝试了所有可能的赋值,该问题是无法解决的。</p><p>在源代码部分,您可以从头开始实现的回溯算法。然而,这种算法被广泛使用,因此,多个库已经包含了它的实现。</p><h2 id="推理-inference" tabindex="-1">推理 (Inference) <a class="header-anchor" href="#推理-inference" aria-label="Permalink to "推理 (Inference)""></a></h2><p>尽管回溯搜索比简单搜索更有效,但它仍然需要大量的算力。另一方面,满足弧一致性需要的算力较低。通过将回溯搜索与推理交织在一起(满足弧一致性),我们可以得到一种更有效的算法。该算法被称为“保持弧一致性”<strong>(Maintaining Arc-Consistency)</strong> 算法。该算法将在每次新的回溯搜索分配之后满足弧一致性。具体来说,在我们对 X 进行新的赋值后,我们将调用<code>AC-3</code>算法,并从所有弧 (Y,X) 的队列开始,其中 Y 是 X 的邻居 (而不是问题中所有弧的队列)。以下是一个经过修订的 Backtrack 算法,该算法保持了弧的一致性。</p><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">function Backtrack(assignment, csp):</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment complete:</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> var </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Select</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Unassigned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Var(assignment, csp)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Domain</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Values(var, assignment, csp):</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value consistent </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment:</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> add {var = value} to assignment </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># new here</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> inferences </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Inference(assignment, csp) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># new here</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> inferences ≠ failure:</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> add inferences to assignment</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> Backtrack(assignment, csp)</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result ≠ failure:</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> remove {var = value} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">and</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> inferences </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> assignment </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># new here</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> failure</span></span></code></pre></div><p>Inference 函数运行 AC-3 算法,如前所述。它的输出是通过满足弧一致性可以做出的所有推断。从字面上看,这些是可以从以前的赋值和约束满足问题的结构中推导出来的新赋值。</p><p>还有其他方法可以提高算法的效率。到目前为止,我们随机选择了一个未分配的变量。然而,有些选择比其他选择更有可能更快地找到解决方案。这需要使用启发式方法。启发式是一条经验法则,这意味着,通常情况下,它会比遵循随机的方法带来更好的结果,但不能保证总是更优。</p><p><strong>最小剩余值 (Minimum Remaining Values(MRV))</strong> 就是这样一种启发式方法。这里的想法是,如果一个变量的域被推理限制了,现在它只剩下一个值 (甚至是两个值),那么通过进行这种赋值,我们将减少以后可能需要进行的回溯次数。也就是说,我们迟早要做这个赋值,因为它是从满足弧一致性中推断出来的。如果这项任务失败了,最好尽快发现,避免以后的回溯。</p><p><img src="https://cdn.xyxsw.site/4.3.4-12.png" alt="4.3.4-12"></p><p>例如,在给定当前赋值的情况下缩小变量的域后,使用 MRV 启发式,我们接下来将选择变量 C,并以 Wed 为其赋值。</p><p><strong>度 (Degree)</strong> 启发式依赖于变量的度,其中度是指将一个变量连接到其他变量的弧数。通过一次赋值选择度最高的变量,我们约束了多个其他变量,从而加快了算法的进程。</p><p><img src="https://cdn.xyxsw.site/4.3.4-13.png" alt="4.3.4-13"></p><p>例如,上面所有的变量都有相同大小的域。因此,我们应该选择一个度最高的域,它将是变量 E。</p><p>这两种启发式方法并不总是适用的。例如,当多个变量在其域中具有相同的最小值时,或者当多个变数具有相同的最高度时。</p><p>另一种提高算法效率的方法是,当我们从变量的域中选择一个值时,使用另一种启发式方法。在这里,我们使用 <strong>最小约束值 (Least Constraining Values)</strong> 启发式,在这里我们选择将约束最少其他变量的值。这里的想法是,在度启发式中,我们希望使用更可能约束其他变量的变量,而在这里,我们希望这个变量对其他变量的约束最少。也就是说,我们希望找到可能是最大潜在麻烦源的变量 (度最高的变量),然后使其尽可能不麻烦 (为其赋值约束其他变量最少的值)。</p><p><img src="https://cdn.xyxsw.site/4.3.4-14.png" alt="4.3.4-14"></p><p>例如,让我们考虑变量 C。如果我们将<code>Tue</code>分配给它,我们将对所有 B、E 和 F 施加约束。然而,如果我们选择<code>Wed</code>,我们将只对 B 和 E 施加约束。因此,选择<code>Tue</code>可能更好。</p><p>总之,优化问题可以用多种方式来表述。在这,我们考虑了局部搜索、线性规划和约束满足。</p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><div class="edit-link" data-v-1bcd8184><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://gitea.xinxijishubu.asia/moyin/fzu-product/src/branch/main/技术资源汇总(杭电支持版)/4.人工智能/4.3.4最优化.md" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="vpi-square-pen edit-link-icon" data-v-1bcd8184></span> 在 Gitea 上修改此页<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link prev" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.3.2%E9%A1%B9%E7%9B%AE%EF%BC%9A%E9%81%97%E4%BC%A0.html" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>上一小节</span><span class="title" data-v-1bcd8184>4.3.3.2项目:遗传</span><!--]--></a></div><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link next" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.3.4.1%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B.html" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>下一小节</span><span class="title" data-v-1bcd8184>4.3.4.1程序示例</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>Made with ❤️ by ALL 协作者</p><p class="copyright" data-v-566314d4>Copyright © 2023-present Evan You && ALL 协作者</p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api-examples.md\":\"DzBTNBEE\",\"changelog.md\":\"FPNSm718\",\"contributing.md\":\"bKW9JrKc\",\"contributors.md\":\"Cw_T0DZB\",\"index.md\":\"B1O1f-Fa\",\"markdown-examples.md\":\"ByeFoAfn\",\"readme.md\":\"BdZRJ36M\",\"使用指南.md\":\"Cx3weXYo\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.1悲壮的学习方式.md\":\"DTYIoXXb\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.2浮躁的心理状态.md\":\"DqgEG2PN\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.3错误的提问姿态.md\":\"Dice7HmS\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.4书籍的盲目崇拜.md\":\"D7lBwdls\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.5错误的学习配比.md\":\"CC8FrxOY\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1高效的前提:摆脱高中思维.md\":\"y1dZYwTe\",\"技术资源汇总(杭电支持版)_2.高效学习_2.2优雅的使用工具.md\":\"H-IrZPye\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3.1阅读文档(b百度爬).md\":\"CoWHVc10\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3.2检索论文核心内容.md\":\"BQCjGA_6\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3.3优秀的开源社区.md\":\"2FaigHdO\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3高效的信息检索.md\":\"DbplLh_F\",\"技术资源汇总(杭电支持版)_2.高效学习_2.4优雅的记笔记.md\":\"BUxzDzb2\",\"技术资源汇总(杭电支持版)_2.高效学习_2.5以理工科的方式阅读英语.md\":\"CCv1xohP\",\"技术资源汇总(杭电支持版)_2.高效学习_2.6学会使用ai辅助学习.md\":\"BA8DOvYX\",\"技术资源汇总(杭电支持版)_2.高效学习_2.高效学习.md\":\"DceOYwF4\",\"技术资源汇总(杭电支持版)_2.高效学习_补充:为什么不要用百度.md\":\"VkOSQaNc\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.0 编程入门之道.md\":\"RO996sX2\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.1该使用哪个编辑器???.md\":\"B4ayWsWH\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.2.1手把手教你学算法——如何使用oj(online judge).md\":\"BTq8bXJ7\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.2.2acm 竞赛从入门到入坟.md\":\"DHh_AnzE\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.2算法杂谈.md\":\"Dyuzf5Rm\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.3如何选择编程语言.md\":\"BmznmeSr\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.1faq:常见问题.md\":\"BnJhsYE9\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.2用什么写 c 语言.md\":\"j3UKqDLB\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.3解决编程问题的普适性过程.md\":\"C2A_1-Fn\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.4c语言前置概念学习.md\":\"BkXXgE64\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.5.1c语言自测标准——链表.md\":\"DVzk3soj\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.5阶段一:编程属性.md\":\"xzkNgg8e\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.1.开始冒险.md\":\"BOo28IRY\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.10.增添属性.md\":\"DfQyVaNx\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.11.设置条件.md\":\"D1w5O6yc\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.12.开启关闭.md\":\"CXNDx_7L\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.13.编写解析器.md\":\"zv8UQDFe\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.14.丰富命令.md\":\"B6oobOWP\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.15.赋予明暗.md\":\"DuKXxo2X\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.16.结语:你终将自由.md\":\"C-H3wZFU\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.2.探索未知.md\":\"Dic21KtY\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.3.指明地点.md\":\"CqJJTYJl\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.4.创建对象.md\":\"sYhd_x2h\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.5.捡起物品.md\":\"8K1USgEU\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.6.绘制地图.md\":\"B_DDqfPJ\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.7.增大距离.md\":\"cJuj5FdO\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.8.移动方向.md\":\"DfqXtQsJ\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.9.练习:生成代码.md\":\"BWPCfe12\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6阶段二:文字冒险(cool).md\":\"4wxQiLET\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.1.1调试理论.md\":\"BG8u_VZC\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.1gdb初探索(编程可阅览).md\":\"DxwzfDRm\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.2c的历史问题:undefined behavior.md\":\"DhVRjYVK\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.3c编译器干了什么.md\":\"BmcVZay6\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.4inline assembly与链接加载.md\":\"q2t6qdUO\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7c基础知识杂谈.md\":\"aePmhQYd\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4c语言.md\":\"DkCJewM5\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.5git与github.md\":\"CHDigJYp\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.1从cs61a看编程语言学习.md\":\"DqQl-8bT\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.2环境配置.md\":\"BhEPqNzV\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.3安装python.md\":\"D3dPRaxz\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.0阶段零:python解释器.md\":\"Dm3hX9NX\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.1阶段一:熟悉语句.md\":\"CLD1IJhu\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.2阶段二:递归操作.md\":\"D7XWEtHx\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.3阶段三:数据抽象.md\":\"CDZ-i__T\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.4阶段四:高阶函数.md\":\"Dsl4HkDc\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.5阶段五:迭代生成.md\":\"5HYOHSTp\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.6结语.md\":\"CCrZz2pj\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4python for fun.md\":\"DkJd7Fze\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6python(灵巧的胶水).md\":\"DiyVGPhf\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.x 聊聊设计模式和程序设计.md\":\"W9mozi2J\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y 附加模块:linux.md\":\"BCrGPX21\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.0计算机教育中缺失的一课.md\":\"BWm_rSoC\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.1linux概念普及.md\":\"CzzMXts9\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.2双系统安装和发行版推荐.md\":\"CVKz1ljH\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.3vmware的安装与安装ubuntu22.04系统.md\":\"DvLQFSm4\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.4wsl的安装.md\":\"DxhJ6pfj\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.5linux初探索.md\":\"DsLYXQrx\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.6vim初探索.md\":\"ZriWo4yK\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.7linux小任务.md\":\"B0_ZolbN\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.编程思维体系构建.md\":\"buCvJWRO\",\"技术资源汇总(杭电支持版)_4.人工智能_4.10llmagent之结构化输出.md\":\"CiF3m2Gf\",\"技术资源汇总(杭电支持版)_4.人工智能_4.11本章节内容的局限性.md\":\"VdWbP1WW\",\"技术资源汇总(杭电支持版)_4.人工智能_4.1前言.md\":\"CbAU8DCP\",\"技术资源汇总(杭电支持版)_4.人工智能_4.2机器学习(ai)快速入门(quick start).md\":\"BEeOolYI\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.1.1程序示例——maze迷宫解搜索.md\":\"-nQ9ZG02\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.1.2项目:tic-tac-toe井字棋.md\":\"DpxLT41Z\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.1搜索.md\":\"oc9gmWWK\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.2.1程序示例——命题逻辑与模型检测.md\":\"CVT6S5El\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.2.2项目:扫雷,骑士与流氓问题.md\":\"DnpnWZd9\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.2知识推理.md\":\"Bdg-XBSz\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.3.1程序示例.md\":\"D2D5pU2z\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.3.2项目:遗传.md\":\"Bee7dgw8\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.3不确定性问题.md\":\"WmYBd5ms\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.4.1程序示例.md\":\"Bm1E_RoV\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.4.2项目:填词游戏.md\":\"BLt1E6wb\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.4最优化.md\":\"CJEsAZQH\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3人工智能导论及机器学习入门.md\":\"4RWDZfjp\",\"技术资源汇总(杭电支持版)_4.人工智能_4.4faq:常见问题.md\":\"BnI046IT\",\"技术资源汇总(杭电支持版)_4.人工智能_4.5图网络略述(intro_gcn).md\":\"Cue-WAA8\",\"技术资源汇总(杭电支持版)_4.人工智能_4.6数据分析.md\":\"Cx1ZD5ZH\",\"技术资源汇总(杭电支持版)_4.人工智能_4.7如何做研究.md\":\"CtUhtBrq\",\"技术资源汇总(杭电支持版)_4.人工智能_4.8科研论文写作.md\":\"DSE7qt-X\",\"技术资源汇总(杭电支持版)_4.人工智能_4.9从 ai 到 智能系统 —— 从 llms 到 agents.md\":\"BFVSZab1\",\"技术资源汇总(杭电支持版)_4.人工智能_4.人工智能.md\":\"C7dQQcV1\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.1嵌入式是什么?可以吃吗?.md\":\"DSWjKS-a\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.2new meaning of c.md\":\"bNGQi2W2\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.3还玩裸机?上操作系统!.md\":\"C80bW3ek\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.富有生命的嵌入式.md\":\"C3jYEQFL\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.1.1sql 注入.md\":\"DQCIZdYm\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.1web安全.md\":\"DVP9mk53\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2.1基础工具的使用.md\":\"DLiapAz1\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2.2软件破解、软件加固.md\":\"BG-KmxLq\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2.3漏洞挖掘、漏洞利用.md\":\"TTf4uEbG\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2二进制安全.md\":\"Dx7vf08P\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.3密码学.md\":\"1BmjaKRy\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.4安全杂项.md\":\"C-nq8JBF\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.5学习资料推荐.md\":\"2Z1hvv_V\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.计算机安全.md\":\"DmuFdA7-\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.1web开发入门.md\":\"cABPZfmp\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.1基础(三件套).md\":\"CeF99FT3\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.2进阶(小项目).md\":\"DkPKrF8C\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.3附录1:前端介绍(详细版).md\":\"D_V6G3Oh\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.4附录2:大前端开发.md\":\"B8u8kcUM\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.5附录3:跨端开发.md\":\"CaT9Y32W\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2前端部分.md\":\"DCAcwGVN\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.3.1基础部分.md\":\"BYudz3X8\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.3.2进阶部分.md\":\"Cg-7LiyH\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.3后端部分.md\":\"DYZ24iwb\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.网络应用开发入门.md\":\"DrgT-DjX\",\"技术资源汇总(杭电支持版)_8.基础学科_8.1经济学科普part1.md\":\"DguU75dE\",\"技术资源汇总(杭电支持版)_8.基础学科_8.基础学科.md\":\"DE7yDZI_\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.1计网速通.md\":\"CkT2fLIN\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.2.3.1ip协议.md\":\"Dm6ee4JO\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.2.3.2子网与无类域间路由.md\":\"C3JPwLoF\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.2.3网络层.md\":\"BNya0rNF\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.3路由与交换.md\":\"BvDV79LN\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.4隧道和代理.md\":\"XNDQhj6B\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.5路由佬入门指南.md\":\"CSkj8qJ8\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.计算机网络.md\":\"CSmCLjNp\",\"技术资源汇总(杭电支持版)_内容索引.md\":\"B9FSKjDT\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"FZU-WIKI\",\"description\":\"FZU生存手册\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"章节\",\"items\":[{\"text\":\"1. 前言\",\"link\":\"/技术资源汇总(杭电支持版)/\"},{\"text\":\"2. 高效学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.高效学习\"},{\"text\":\"3. 编程思维体系构建\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.编程思维体系构建\"},{\"text\":\"4. 人工智能\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.人工智能\"},{\"text\":\"5. 富有生命的嵌入式\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.富有生命的嵌入式\"},{\"text\":\"6. 计算机安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.计算机安全\"},{\"text\":\"7. 网络应用开发\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.网络应用开发\"},{\"text\":\"8. 基础学科\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.基础学科\"},{\"text\":\"9. 计算机网络\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.计算机网络\"}]}],\"sidebar\":{\"/\":[{\"text\":\"简介\",\"collapsed\":true,\"items\":[{\"text\":\"简介\",\"link\":\"/简介\"},{\"text\":\"使用指南\",\"link\":\"/使用指南\"},{\"text\":\"技术资源汇总(杭电支持版)\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"}]},{\"text\":\"1.杭电生存指南(最重要模块)\",\"collapsed\":true,\"items\":[{\"text\":\"1.1 人文社科的重要性(韩健夫老师寄语)\",\"link\":\"/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)\"},{\"text\":\"1.2 竞赛指北\",\"link\":\"/1.杭电生存指南/1.2竞赛指北\"},{\"text\":\"1.3 导师选择\",\"link\":\"/1.杭电生存指南/1.3导师选择\"},{\"text\":\"1.4 小心项目陷阱\",\"link\":\"/1.杭电生存指南/1.4小心项目陷阱\"},{\"text\":\"1.5 小组作业避雷指南\",\"link\":\"/1.杭电生存指南/1.5小组作业避雷指南\"},{\"text\":\"1.6 正确解读GPA\",\"link\":\"/1.杭电生存指南/1.6正确解读GPA\"},{\"text\":\"1.7 杭电出国自救指南\",\"link\":\"/1.杭电生存指南/1.7杭电出国自救指南\"},{\"text\":\"1.8 转专业二三事\",\"link\":\"/1.杭电生存指南/1.8转专业二三事\"},{\"text\":\"1.9 问题专题:好想进入实验室\",\"link\":\"/1.杭电生存指南/1.9问题专题:好想进入实验室\"},{\"text\":\"1.10 如何读论文\",\"link\":\"/1.杭电生存指南/1.10如何读论文\"},{\"text\":\"1.11 陷入虚无主义?进来看看吧\",\"link\":\"/1.杭电生存指南/1.11陷入虚无主义?进来看看吧\"},{\"text\":\"1.12 选课原则与抢课技巧\",\"link\":\"/1.杭电生存指南/1.12选课原则与抢课技巧\"},{\"text\":\"1.13 数学学习篇\",\"link\":\"/1.杭电生存指南/1.13数学学习篇\"},{\"text\":\"1.14 杭电“失败”指南\",\"link\":\"/1.杭电生存指南/1.14 杭电失败指南\"}]},{\"text\":\"贡献者\",\"link\":\"/contributors\"},{\"text\":\"贡献指南\",\"link\":\"/CONTRIBUTING\"}],\"/技术资源汇总(杭电支持版)/\":[{\"text\":\"2.高效学习\",\"collapsed\":true,\"items\":[{\"text\":\"2.高效学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.高效学习\"},{\"text\":\"2.1高效的前提:摆脱高中思维\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1高效的前提:摆脱高中思维\"},{\"text\":\"2.2优雅的使用工具\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.2优雅的使用工具\"},{\"text\":\"2.3高效的信息检索\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3高效的信息检索\"},{\"text\":\"2.4优雅的记笔记\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.4优雅的记笔记\"},{\"text\":\"2.5以理工科的方式阅读英语\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.5以理工科的方式阅读英语\"},{\"text\":\"2.6学会使用AI辅助学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.6学会使用AI辅助学习\"}]},{\"text\":\"3.编程思维体系构建\",\"collapsed\":true,\"items\":[{\"text\":\"3.编程思维体系构建\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.编程思维体系构建\"},{\"text\":\"3.0 编程入门之道\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.0 编程入门之道\"},{\"text\":\"3.1该使用哪个编辑器???\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.1该使用哪个编辑器???\"},{\"text\":\"3.2算法杂谈\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2算法杂谈\"},{\"text\":\"3.3如何选择编程语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.3如何选择编程语言\"},{\"text\":\"3.4C语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4C语言\"},{\"text\":\"3.5git与github\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.5git与github\"},{\"text\":\"3.6Python(灵巧的胶水)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6Python(灵巧的胶水)\"},{\"text\":\"3.X 聊聊设计模式和程序设计\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.X 聊聊设计模式和程序设计\"},{\"text\":\"3.Y 附加模块:Linux\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y 附加模块:Linux\"}]},{\"text\":\"4.人工智能\",\"collapsed\":true,\"items\":[{\"text\":\"4.人工智能\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.人工智能\"},{\"text\":\"4.1前言\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.1前言\"},{\"text\":\"4.2机器学习(AI)快速入门(quick start)\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.2机器学习(AI)快速入门(quick start)\"},{\"text\":\"4.3人工智能导论及机器学习入门\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3人工智能导论及机器学习入门\"},{\"text\":\"4.4FAQ:常见问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.4FAQ:常见问题\"},{\"text\":\"4.5图网络略述(intro&GCN)\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.5图网络略述(intro&GCN)\"},{\"text\":\"4.6数据分析\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.6数据分析\"},{\"text\":\"4.7如何做研究\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.7如何做研究\"},{\"text\":\"4.8科研论文写作\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.8科研论文写作\"},{\"text\":\"4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\"},{\"text\":\"4.10LLM Agent之结构化输出\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.10LLMAgent之结构化输出\"},{\"text\":\"4.11本章节内容的局限性\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.11本章节内容的局限性\"}]},{\"text\":\"5.富有生命的嵌入式\",\"collapsed\":true,\"items\":[{\"text\":\"5.富有生命的嵌入式\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.富有生命的嵌入式\"},{\"text\":\"5.1嵌入式是什么?可以吃吗?\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?\"},{\"text\":\"5.2New meaning of C\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.2New meaning of C\"},{\"text\":\"5.3还玩裸机?上操作系统!\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!\"}]},{\"text\":\"6.计算机安全\",\"collapsed\":true,\"items\":[{\"text\":\"6.计算机安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.计算机安全\"},{\"text\":\"6.1Web安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.1Web安全\"},{\"text\":\"6.2二进制安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2二进制安全\"},{\"text\":\"6.3密码学\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.3密码学\"},{\"text\":\"6.4安全杂项\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.4安全杂项\"},{\"text\":\"6.5学习资料推荐\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.5学习资料推荐\"}]},{\"text\":\"7.网络应用开发入门\",\"collapsed\":true,\"items\":[{\"text\":\"7.网络应用开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.网络应用开发入门\"},{\"text\":\"7.1WEB开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.1WEB开发入门\"},{\"text\":\"7.2前端部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.1基础(三件套)\"},{\"text\":\"7.3后端部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3.1基础部分\"}]},{\"text\":\"8.基础学科\",\"collapsed\":true,\"items\":[{\"text\":\"8.基础学科\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.基础学科\"},{\"text\":\"8.1经济学科普Part1\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.1经济学科普Part1\"}]},{\"text\":\"9.计算机网络\",\"collapsed\":true,\"items\":[{\"text\":\"9.计算机网络\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.计算机网络\"},{\"text\":\"9.1 计网速通\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.1计网速通\"}]}],\"/技术资源汇总(杭电支持版)/2.高效学习/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"2.高效学习\",\"collapsed\":false,\"items\":[{\"text\":\"2.高效学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.高效学习\"},{\"text\":\"2.1高效的前提:摆脱高中思维\",\"collapsed\":true,\"items\":[{\"text\":\"2.1高效的前提:摆脱高中思维\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1高效的前提:摆脱高中思维\"},{\"text\":\"2.1.1悲壮的学习方式\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.1悲壮的学习方式\"},{\"text\":\"2.1.2浮躁的心理状态\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.2浮躁的心理状态\"},{\"text\":\"2.1.3错误的提问姿态\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.3错误的提问姿态\"},{\"text\":\"2.1.4书籍的盲目崇拜\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.4书籍的盲目崇拜\"},{\"text\":\"2.1.5错误的学习配比\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.5错误的学习配比\"}]},{\"text\":\"2.2优雅的使用工具\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.2优雅的使用工具\"},{\"text\":\"2.3高效的信息检索\",\"collapsed\":true,\"items\":[{\"text\":\"2.3高效的信息检索\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3高效的信息检索\"},{\"text\":\"2.3.1阅读文档(B百度爬)\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3.1阅读文档(B百度爬)\"},{\"text\":\"2.3.2检索论文核心内容\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3.2检索论文核心内容\"},{\"text\":\"2.3.3优秀的开源社区\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3.3优秀的开源社区\"},{\"text\":\"补充:为什么不要用百度\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/补充:为什么不要用百度\"}]},{\"text\":\"2.4优雅的记笔记\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.4优雅的记笔记\"},{\"text\":\"2.5以理工科的方式阅读英语\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.5以理工科的方式阅读英语\"},{\"text\":\"2.6学会使用AI辅助学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.6学会使用AI辅助学习\"}]}],\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"3.编程思维体系构建\",\"collapsed\":false,\"items\":[{\"text\":\"3.编程思维体系构建\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.编程思维体系构建\"},{\"text\":\"3.0 编程入门之道\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.0 编程入门之道\"},{\"text\":\"3.1该使用哪个编辑器???\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.1该使用哪个编辑器???\"},{\"text\":\"3.2算法杂谈\",\"collapsed\":true,\"items\":[{\"text\":\"3.2算法杂谈\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2算法杂谈\"},{\"text\":\"3.2.1手把手教你学算法——如何使用OJ(Online Judge)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2.1手把手教你学算法——如何使用OJ(Online Judge)\"},{\"text\":\"3.2.2ACM 竞赛从入门到入坟\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2.2ACM 竞赛从入门到入坟\"}]},{\"text\":\"3.3如何选择编程语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.3如何选择编程语言\"},{\"text\":\"3.4C语言\",\"collapsed\":true,\"items\":[{\"text\":\"3.4C语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4C语言\"},{\"text\":\"3.4.1FAQ:常见问题\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.1FAQ:常见问题\"},{\"text\":\"3.4.2用什么写 C 语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.2用什么写 C 语言\"},{\"text\":\"3.4.3解决编程问题的普适性过程\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.3解决编程问题的普适性过程\"},{\"text\":\"3.4.4C语言前置概念学习\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.4C语言前置概念学习\"},{\"text\":\"3.4.5阶段一:编程属性\",\"collapsed\":true,\"items\":[{\"text\":\"3.4.5阶段一:编程属性\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.5阶段一:编程属性\"},{\"text\":\"3.4.5.1C语言自测标准——链表\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.5.1C语言自测标准——链表\"}]},{\"text\":\"3.4.6阶段二:文字冒险(cool)\",\"collapsed\":true,\"items\":[{\"text\":\"3.4.6阶段二:文字冒险(cool)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool)\"},{\"text\":\"3.4.6.1.开始冒险\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.1.开始冒险\"},{\"text\":\"3.4.6.2.探索未知\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.2.探索未知\"},{\"text\":\"3.4.6.3.指明地点\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.3.指明地点\"},{\"text\":\"3.4.6.4.创建对象\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.4.创建对象\"},{\"text\":\"3.4.6.5.捡起物品\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.5.捡起物品\"},{\"text\":\"3.4.6.6.绘制地图\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.6.绘制地图\"},{\"text\":\"3.4.6.7.增大距离\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.7.增大距离\"},{\"text\":\"3.4.6.8.移动方向\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.8.移动方向\"},{\"text\":\"3.4.6.9.练习:生成代码\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.9.练习:生成代码\"},{\"text\":\"3.4.6.10.增添属性\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.10.增添属性\"},{\"text\":\"3.4.6.11.设置条件\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.11.设置条件\"},{\"text\":\"3.4.6.12.开启关闭\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.12.开启关闭\"},{\"text\":\"3.4.6.13.编写解析器\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.13.编写解析器\"},{\"text\":\"3.4.6.14.丰富命令\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.14.丰富命令\"},{\"text\":\"3.4.6.15.赋予明暗\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.15.赋予明暗\"},{\"text\":\"3.4.6.16.结语:你终将自由\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.16.结语:你终将自由\"}]},{\"text\":\"3.4.7C基础知识杂谈\",\"collapsed\":true,\"items\":[{\"text\":\"3.4.7C基础知识杂谈\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7C基础知识杂谈\"},{\"text\":\"3.4.7.1GDB初探索(编程可阅览)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)\"},{\"text\":\"3.4.7.1.1调试理论\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.1.1调试理论\"},{\"text\":\"3.4.7.2C的历史问题:undefined behavior\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior\"},{\"text\":\"3.4.7.3C编译器干了什么\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.3C编译器干了什么\"},{\"text\":\"3.4.7.4Inline Assembly与链接加载\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载\"}]}]},{\"text\":\"3.5git与github\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.5git与github\"},{\"text\":\"3.6Python(灵巧的胶水)\",\"collapsed\":true,\"items\":[{\"text\":\"3.6Python(灵巧的胶水)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6Python(灵巧的胶水)\"},{\"text\":\"3.6.1从CS61A看编程语言学习\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.1从CS61A看编程语言学习\"},{\"text\":\"3.6.2环境配置\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.2环境配置\"},{\"text\":\"3.6.3安装python\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.3安装python\"},{\"text\":\"3.6.4Python for fun\",\"collapsed\":true,\"items\":[{\"text\":\"3.6.4Python for fun\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4Python for fun\"},{\"text\":\"3.6.4.0阶段零:Python解释器\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.0阶段零:Python解释器\"},{\"text\":\"3.6.4.1阶段一:熟悉语句\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句\"},{\"text\":\"3.6.4.2阶段二:递归操作\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.2阶段二:递归操作\"},{\"text\":\"3.6.4.3阶段三:数据抽象\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.3阶段三:数据抽象\"},{\"text\":\"3.6.4.4阶段四:高阶函数\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.4阶段四:高阶函数\"},{\"text\":\"3.6.4.5阶段五:迭代生成\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.5阶段五:迭代生成\"},{\"text\":\"3.6.4.6结语\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.6结语\"}]}]},{\"text\":\"3.X 聊聊设计模式和程序设计\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.X 聊聊设计模式和程序设计\"},{\"text\":\"3.Y 附加模块:Linux\",\"collapsed\":true,\"items\":[{\"text\":\"3.Y 附加模块:Linux\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y 附加模块:Linux\"},{\"text\":\"3.Y.1Linux概念普及\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.1Linux概念普及\"},{\"text\":\"3.Y.2双系统安装和发行版推荐\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.2双系统安装和发行版推荐\"},{\"text\":\"3.Y.3VMware的安装与安装Ubuntu22.04系统\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.3VMware的安装与安装Ubuntu22.04系统\"},{\"text\":\"3.Y.4WSL的安装\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.4WSL的安装\"},{\"text\":\"3.Y.5Linux初探索\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.5Linux初探索\"},{\"text\":\"3.Y.6Vim初探索\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.6Vim初探索\"},{\"text\":\"3.Y.7linux小任务\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.7linux小任务\"}]}]}],\"/技术资源汇总(杭电支持版)/4.人工智能/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"4.人工智能\",\"collapsed\":false,\"items\":[{\"text\":\"4.人工智能\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.人工智能\"},{\"text\":\"4.1前言\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.1前言\"},{\"text\":\"4.2机器学习(AI)快速入门(quick start)\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.2机器学习(AI)快速入门(quick start)\"},{\"text\":\"4.3人工智能导论及机器学习入门\",\"collapsed\":true,\"items\":[{\"text\":\"4.3人工智能导论及机器学习入门\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3人工智能导论及机器学习入门\"},{\"text\":\"4.3.1搜索\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.1搜索\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.1搜索\"},{\"text\":\"4.3.1.1程序示例——maze迷宫解搜索\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索\"},{\"text\":\"4.3.1.2项目:Tic-Tac-Toe井字棋\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋\"}]},{\"text\":\"4.3.2知识推理\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.2知识推理\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.2知识推理\"},{\"text\":\"4.3.2.1程序示例——命题逻辑与模型检测\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测\"},{\"text\":\"4.3.2.2项目:扫雷,骑士与流氓问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题\"}]},{\"text\":\"4.3.3不确定性问题\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.3不确定性问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.3不确定性问题\"},{\"text\":\"4.3.3.1程序示例\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.3.1程序示例\"},{\"text\":\"4.3.3.2项目:遗传\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.3.2项目:遗传\"}]},{\"text\":\"4.3.4最优化\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.4最优化\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.4最优化\"},{\"text\":\"4.3.4.1程序示例\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.4.1程序示例\"},{\"text\":\"4.3.4.2项目:填词游戏\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.4.2项目:填词游戏\"}]}]},{\"text\":\"4.4FAQ:常见问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.4FAQ:常见问题\"},{\"text\":\"4.5图网络略述(intro&GCN)\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.5图网络略述(intro&GCN)\"},{\"text\":\"4.6数据分析\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.6数据分析\"},{\"text\":\"4.7如何做研究\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.7如何做研究\"},{\"text\":\"4.8科研论文写作\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.8科研论文写作\"},{\"text\":\"4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\"},{\"text\":\"4.10LLM Agent之结构化输出\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.10LLMAgent之结构化输出\"},{\"text\":\"4.11本章节内容的局限性\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.11本章节内容的局限性\"}]}],\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"5.富有生命的嵌入式\",\"collapsed\":false,\"items\":[{\"text\":\"5.富有生命的嵌入式\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.富有生命的嵌入式\"},{\"text\":\"5.1嵌入式是什么?可以吃吗?\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?\"},{\"text\":\"5.2New meaning of C\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.2New meaning of C\"},{\"text\":\"5.3还玩裸机?上操作系统!\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!\"}]}],\"/技术资源汇总(杭电支持版)/6.计算机安全/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"6.计算机安全\",\"collapsed\":false,\"items\":[{\"text\":\"6.计算机安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.计算机安全\"},{\"text\":\"6.1Web安全\",\"collapsed\":true,\"items\":[{\"text\":\"6.1Web安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.1Web安全\"},{\"text\":\"6.1.1SQL 注入\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.1.1SQL 注入\"}]},{\"text\":\"6.2二进制安全\",\"collapsed\":true,\"items\":[{\"text\":\"6.2二进制安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2二进制安全\"},{\"text\":\"6.2.1基础工具的使用\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2.1基础工具的使用\"},{\"text\":\"6.2.2软件破解、软件加固\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2.2软件破解、软件加固\"},{\"text\":\"6.2.3漏洞挖掘、漏洞利用\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2.3漏洞挖掘、漏洞利用\"}]},{\"text\":\"6.3密码学\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.3密码学\"},{\"text\":\"6.4安全杂项\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.4安全杂项\"},{\"text\":\"6.5学习资料推荐\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.5学习资料推荐\"}]}],\"/技术资源汇总(杭电支持版)/7.网络应用开发/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"7.网络应用开发\",\"collapsed\":false,\"items\":[{\"text\":\"7.网络应用开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.网络应用开发入门\"},{\"text\":\"7.1WEB开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.1WEB开发入门\"},{\"text\":\"7.2前端部分\",\"collapsed\":true,\"items\":[{\"text\":\"7.2.1基础(三件套)\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.1基础(三件套)\"},{\"text\":\"7.2.2进阶(小项目)\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.2进阶(小项目)\"},{\"text\":\"7.2.3附录1:前端介绍(详细版)\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.3附录1:前端介绍(详细版)\"},{\"text\":\"7.2.4附录2:大前端开发\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.4附录2:大前端开发\"},{\"text\":\"7.2.5附录3:跨端开发\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.5附录3:跨端开发\"}]},{\"text\":\"7.3后端部分\",\"collapsed\":true,\"items\":[{\"text\":\"7.3后端部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3后端部分\"},{\"text\":\"7.3.1基础部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3.1基础部分\"},{\"text\":\"7.3.2进阶部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3.2进阶部分\"}]}]}],\"/技术资源汇总(杭电支持版)/8.基础学科/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"8.基础学科\",\"collapsed\":false,\"items\":[{\"text\":\"8.基础学科\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.基础学科\"},{\"text\":\"8.1经济学科普Part1\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.1经济学科普Part1\"}]}],\"/技术资源汇总(杭电支持版)/9.计算机网络/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"9.计算机网络\",\"collapsed\":false,\"items\":[{\"text\":\"9 计算机网络\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.计算机网络\"},{\"text\":\"9.1 计网速通\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.1计网速通\"},{\"text\":\"9.2.1 物理层(待完成)\"},{\"text\":\"9.2.2 链路层(待完成)\"},{\"text\":\"9.2.3 网络层\",\"collapsed\":true,\"items\":[{\"text\":\"9.2.3 网络层\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3网络层\"},{\"text\":\"9.2.3.1 IP 协议\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3.1IP协议\"},{\"text\":\"9.2.3.2 子网与无类域间路由\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3.2子网与无类域间路由\"}]}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://gitea.xinxijishubu.asia/moyin/fzu-product\"}],\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"Made with ❤️ by ALL 协作者\",\"copyright\":\"Copyright © 2023-present Evan You && ALL 协作者\"},\"lastUpdatedText\":\"上次更改\",\"docFooter\":{\"prev\":\"上一小节\",\"next\":\"下一小节\"},\"editLink\":{\"pattern\":\"https://gitea.xinxijishubu.asia/moyin/fzu-product/src/branch/main/:path\",\"text\":\"在 Gitea 上修改此页\"},\"externalLinkIcon\":true},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||
|
||
</body>
|
||
</html> |