Files
mcm-mfp/task3/__pycache__/07_sensitivity.cpython-313.pyc

144 lines
19 KiB
Plaintext
Raw Normal View History

2026-01-19 15:05:55 +08:00
<EFBFBD>
2026-01-20 01:55:46 +08:00
ydniq><00> <00><><00>SrSSKrSSKrSSKJr SSKrSSKrSSK r SSK
2026-01-19 19:38:38 +08:00
J r \R"S5 \ "\ R"55S- r\ "\ R"55S- r\R!SSS 9 \R!SSS 9 \R"R%S
2026-01-20 01:55:46 +08:00
\"\55 \R"R%S \"\55 SSKJr SS KJr S SSSSSSS.rSrSr\R6R90S\_S\_S\_S\_S\S_S\S_S\S_S\S_S \_S!S"_S#S_S$\"S%\S&\S'\S(\S)/5_S*S_S+S,_S-\_S.\_S//S0Q_S1S20E5 S3rS4rS5rS6r S7r!S8r"S<>S9jr#S<>S:jr$S;r%S<\RLS=\RN4S>jr(S<>SBjr)\*"SC5 \*"SD5 \*"SC5 \ "\+5RY5RZr.\.RZSE- SF- r/\.SG- r0\.SH- SI- r1\1RZR!SSS 9 \Rd"\/5r3\*"SJ\4"\35SK35 \("\35r5S?r6S@r7SAr8SAr9\)"\3\5\6\7\8\95r:\*"SL\:SMSNSO\:SPSQ35 \Rv"\Rx"SRSSST5SU5\Rx"SVSWSX\=SY9\Rx"SZS[S\\=SY9\Rv"\Rx"SRS]ST5SU5S^.r>/r?\*"S_5 \*"S`5 \>SaH5r@\)"\3\5\6\7\8\@5rA\AR9Sa\@Sb.5 \?R<>\A5 M7 \*"Sc5 \>SdH5r@\)"\3\5\@\7\8\95rA\AR9Sd\@Sb.5 \?R<>\A5 M7 \*"Se5 \>SfH5r@\)"\3\5\6\@\8\95rA\AR9Sf\@Sb.5 \?R<>\A5 M7 \*"Sg5 \>ShH5r@\)"\3\5\6\7\@\95rA\AR9Sh\@Sb.5 \?R<>\A5 M7 \RL"\?5rC\*"Si5 \R<>"SUSUSjSk9urErF\ER<45>SlSmSnSo9 SpSqSrSsS^.rH/S^QrI\J"\I5GH<>urKrL\F\KSU-\KSU-4rM\C\CSt\L:HR<>Su5rO\MR<4D>\OSu\OSMSv\SwSxSySz9urQ\MR<4D>\OSu\OS{Sv\S'SxS|S}S~9urR\MR<4D>\H\LS5 \MR<4D>S5 \MR<4D>5rV\VR<56>\OSu\OSPS<>\S(SxS<78>Sz9urW\VR<56>S<>\S(S<>9 \VR<56>S<>\S(S<>9 \LSa:Xa\9rYO\LSd:Xa\6rYO\LSf:Xa\7rYO\LSh:Xa\8rY\MR<4D>\Y\S)S<>S<EFBFBD>S<EFBFBD>9 \Q\R\W/r[\[Vs/sHoR<>5PM snr]\MR<4D>\[\]S<>SS<>9 \MR<4D>S<>\H\LS35 \MR<4D>SS"S<>9 GM<> \R<>"/S<>QS<>9 \R<>"\1S<31>\S<>9 \*"S<>\135 \R<>"\0S<30>S<EFBFBD>9rd\CR<43>\dS<64>S2S<32>9 /rf\IH<>rL\C\CSt\L:Hrg\fR<66>\L\gSMR<>5SNS<>\gSMR<>5SN3\gSMR<>5\gSMR<>5-
\:SM- S<>-\gS{R<>5SNS<>\gS{R<>5SN3\gS{R<>5\gS{R<>5-
\:S{- S<>-\gSPR<>5SQS<>\gSPR<>5SQ3S<>.5 GM \RL"\f5R<>\dS<64>S2S<32>9 SSS5 \*"S<>\035 \*"S<>5 gs snf!,(df  N'=f)<29>u<EFBFBD>
2026-01-19 15:05:55 +08:00
Task 3 - Step 7: 敏感性分析 (Refined)
=====================================
分析以下参数对模型输出的影响 (高分辨率扫描):
1. 合并比例 r_merge: 0.1 ~ 0.9 (步长 0.01)
2. 距离阈值 l_max: 10 ~ 100 miles (步长 1)
3. 容量上限 μ_sum_max: 350 ~ 550 (步长 5)
4. CV阈值: 0.1 ~ 1.0 (步长 0.01)
输出:
- 07_sensitivity.xlsx (详细数据)
- figures/fig3_sensitivity.png (敏感性曲线图)
2026-01-20 01:55:46 +08:00
<EFBFBD>N)<01>stats)<01>Path<74>ignore<72>mm_task3_mplconfig<69>mm_task3_xdg_cacheT)<02>parents<74>exist_ok<6F> MPLCONFIGDIR<49>XDG_CACHE_HOME)<01>cyclerz#D7D1C7z#3F3F3Fz#8FA3A7z#6E858Az#AEB8A6z#B07A6Az#8C857A)<07>grid<69>text<78>
2026-01-19 19:38:38 +08:00
muted_blue<EFBFBD>muted_blue_dark<72>sage<67>
2026-01-20 01:55:46 +08:00
terracotta<EFBFBD> warm_grayz#FFFFFFz#DADDE1zfigure.facecolorzaxes.facecolorzsavefig.facecolorzaxes.edgecolorzaxes.labelcolorrz xtick.colorz ytick.colorz
2026-01-19 19:38:38 +08:00
text.colorz
grid.colorz
2026-01-20 01:55:46 +08:00
grid.alphag<61><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?z axes.gridzaxes.prop_cycle<6C>colorrrrrzlegend.frameonzlegend.framealphag<61><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?zlegend.facecolorzlegend.edgecolorzfont.sans-serif)zArial Unicode MS<4D>SimHeiz DejaVu Sanszaxes.unicode_minusF<73><46><00><><><E79A99><EFBFBD><EFBFBD><EFBFBD>?c<00>8<00>US:<3A>a[S[U- 5$S$)Nr<00><00>?)<02>min<69>QUALITY_THRESHOLD)<01>mu_totals <20>task3/07_sensitivity.py<70>quality_factorrYs <00><00>5=<3D><01>\<5C>3<EFBFBD>s<EFBFBD>%<25><08>0<> 1<>J<>s<EFBFBD>J<>c<00><00>US:Xa [X5$X-
2026-01-19 15:05:55 +08:00
U- nU[RRU5-U[RR U5--
US[RRU5-
2026-01-20 01:55:46 +08:00
--$<00>Nr<00>)rr<00>norm<72>cdf<64>pdf)<04>q<>mu<6D>sigma<6D>zs r<00>expected_servicer+\sk<00><00> <0C><01>z<EFBFBD><12>2<EFBFBD>z<EFBFBD><19>
2026-01-19 15:05:55 +08:00
<EFBFBD><16>5<EFBFBD><18>A<EFBFBD> <0A><05>
<EFBFBD>
2026-01-20 01:55:46 +08:00
<EFBFBD><0E><0E>q<EFBFBD>!<21> !<21>E<EFBFBD>E<EFBFBD>J<EFBFBD>J<EFBFBD>N<EFBFBD>N<EFBFBD>1<EFBFBD>,=<3D>$=<3D> =<3D><01>Q<EFBFBD><15><1A><1A><1E><1E>XY<58>IZ<49>EZ<45>@[<5B> [<5B>[r c<00><><00>[R"U5nU[R"U5)n[U5S:Xag[R"U5n[U5n[R
2026-01-19 15:05:55 +08:00
"U5nUSS:<3A>aHS[R "[R"SUS-5U-5-US-US--
2026-01-20 01:55:46 +08:00
XS-- $S$)Nr<00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r#)<08>np<6E>array<61>isnan<61>len<65>sort<72>cumsum<75>sum<75>arange)<03>values<65>nr4s r<00>gini_coefficientr9bs<><00><00> <0F>X<EFBFBD>X<EFBFBD>f<EFBFBD> <1D>F<EFBFBD> <13>R<EFBFBD>X<EFBFBD>X<EFBFBD>f<EFBFBD>%<25>%<25> &<26>F<EFBFBD>
<EFBFBD>6<EFBFBD>{<7B>a<EFBFBD><17><10> <0F>W<EFBFBD>W<EFBFBD>V<EFBFBD>_<EFBFBD>F<EFBFBD> <0B>F<EFBFBD> <0B>A<EFBFBD> <0F>Y<EFBFBD>Y<EFBFBD>v<EFBFBD> <1E>F<EFBFBD>ek<65>ln<6C>eo<65>rs<72>es<65>A<EFBFBD><02><06><06><02> <09> <09>!<21>Q<EFBFBD><11>U<EFBFBD>+<2B>f<EFBFBD>4<>6<> 6<>!<21>a<EFBFBD>%<25>6<EFBFBD>"<22>:<3A>9M<39> M<>RS<52>]_<>V`<60>R`<60> a<>z<>yz<79>zr c<00>|<00>US:Xa XU-:<3A>aS$S$X- nS[RRXA-
2026-01-19 15:05:55 +08:00
U- 5-
2026-01-20 01:55:46 +08:00
$r")rr$r%)r'r(r)<00> threshold<6C>critical_demands r<00>shortfall_probabilityr=lsD<00><00> <0C><01>z<EFBFBD><15>i<EFBFBD><1E>'<27>q<EFBFBD>.<2E>Q<EFBFBD>.<2E><17>m<EFBFBD>O<EFBFBD> <0C>u<EFBFBD>z<EFBFBD>z<EFBFBD>~<7E>~<7E><EFBFBD>3<>u<EFBFBD><<3C>=<3D> =<3D>=r c<00>8<00>X-S:XaU$X0-XU-
--X-- $)Nr<00>)<05>mu_i<5F>sigma_i<5F>mu_j<5F>sigma_j<5F>Qs r<00>optimal_allocationrErs.<00><00><0E><18>A<EFBFBD><1D><13> <0B> <13>N<EFBFBD>W<EFBFBD>D<EFBFBD><08>1<> 1<>g<EFBFBD>6G<36> H<>Hr c<00><><00>X-S- n[R"U5nX-
2026-01-19 15:05:55 +08:00
nX-
2026-01-20 01:55:46 +08:00
nS[R"US-[R"U5U-S--5-$)Nr.<00>@Q@)r/<00>radians<6E>sqrt<72>cos)<08>lat1<74>lon1<6E>lat2<74>lon2<6E>lat_avg<76> lat_avg_rad<61> delta_lat<61> delta_lons r<00> calc_distancerSwsZ<00><00><13>{<7B>a<EFBFBD><1F>G<EFBFBD><14>*<2A>*<2A>W<EFBFBD>%<25>K<EFBFBD><14> <0B>I<EFBFBD><14> <0B>I<EFBFBD> <0F>"<22>'<27>'<27>)<29>Q<EFBFBD>,<2C>"<22>&<26>&<26><1B>*=<3D> <09>*I<>A<EFBFBD>)M<>M<>N<> N<>Nr <00>sites_df<64>returnc<00><><00>USR[S9nUSR[S9nUSS2S4USSS24-S- n[R"U5nUSS2S4USSS24-
2026-01-19 15:05:55 +08:00
nUSS2S4USSS24-
nS[R"US-[R
2026-01-20 01:55:46 +08:00
"U5U-S--5-n[R "US5 U$)N<>lat<61><01>dtype<70>long@rGr.g)<07>to_numpy<70>floatr/rHrIrJ<00> fill_diagonal)rTrWrZrOrPrQrR<00>dists r<00>compute_distance_matrixr_~s<><00><00>
2026-01-19 15:05:55 +08:00
<12>5<EFBFBD>/<2F>
"<22>
"<22><15>
"<22>
/<2F>C<EFBFBD>
<12>5<EFBFBD>/<2F>
"<22>
"<22><15>
"<22>
2026-01-20 01:55:46 +08:00
/<2F>C<EFBFBD><12>1<EFBFBD>d<EFBFBD>7<EFBFBD>|<7C>c<EFBFBD>$<24><01>'<27>l<EFBFBD>*<2A>c<EFBFBD>1<>G<EFBFBD><14>*<2A>*<2A>W<EFBFBD>%<25>K<EFBFBD><13>A<EFBFBD>t<EFBFBD>G<EFBFBD> <0C>s<EFBFBD>4<EFBFBD><11>7<EFBFBD>|<7C>+<2B>I<EFBFBD><13>A<EFBFBD>t<EFBFBD>G<EFBFBD> <0C>s<EFBFBD>4<EFBFBD><11>7<EFBFBD>|<7C>+<2B>I<EFBFBD> <0F>"<22>'<27>'<27>)<29>Q<EFBFBD>,<2C>"<22>&<26>&<26><1B>*=<3D> <09>*I<>A<EFBFBD>)M<>M<>N<> N<>D<EFBFBD><06><14><14>T<EFBFBD>3<EFBFBD><1F> <0F>Kr <00>2<00><><00><00>?c<00><> <00>UR5nUSUS- US'[U5n/n[U5H<>n [U S-U5H<>n
2026-01-19 15:05:55 +08:00
URU n URU
n [ XU
45n X<>:<3A>aM7U SU S-nX<>:<3A>aMIU SU:<3A>d U SU:<3A>aM]U SS-U SS--nSU-[
- SU -U- -
SU-US-- -
nUR X<>U S U S U U SU SU SU SU S
U S
U S U S US .5 M<> M<> [U5S :Xa<>US
US-R5n[US
USR[5-US-5nUR5VVs/sHunnUS
US-US - PM nnn[U5n[U5nS S UUUUS S S.$[R"U5RSSS9n/n[!5nUR5HcunnUSU;dMUSU;dMUR UR#55 UR%US5 UR%US5 Me UHhn['USUSUSUS[
5nUUS'[)UUSUS5US'[)[
U-
USUS5US'USUS-US'Mj US
R5US'0nUH<>nUSUSnn[+[UU5U-5n U [UU5:<3A>a[UU5S-
n U S:aS n USUSn"n!UU -
UR,U!S4'UU -
UR,U"S4'U UUSUS 4'M<> USR5n#[UR/55n$S!U#U$--
n%U%S :<3A>a<>US R5n&U%US -U&- R[0R25R5[*5US"'U%US"R5-
n'U'S :<3A>aNU%US -U&- US"-
n(U(R7[+U'55R8n)UR,U)S"4==S- ss'USUS"-US#'OUSUS#'US#US-R5nUH(nUR;USUS 4S 5n UU US-- nM* [US#USR[5-US-5nUHAnUR;USUS 4S 5n USUS-n[U5n*UU U*-US-- nMC 0n+UR5H*un,nUS S :<3A>aUS#US-US - OS n-U-U+US 'M, UHonUR;USUS 4S 5n US$S :<3A>aU US-US$- OS n.US%S :<3A>aU US-US%- OS n/U+US==U.- ss'U+US ==U/- ss'Mq [=U+R/55n[U5nU(a [U5OS n/n0UHRnUSn1[?U1USUS5n2[?[
U1-
USUS5n3U0R SSU2-
SU3-
--
5 MT U0(a[0R@"U05OS n4U$S!- n5[U5U$UUUUU4U5S.$s snnf)&u5
运行完整的Task 3流水线返回评估指标
2026-01-20 01:55:46 +08:00
r)r(<00>cvr#r.rg333333<33>?rb<00>site_id<69>k<>mu_tilde)<0E>idx_i<5F>idx_j<5F> site_i_id<69> site_j_id<69>distancer@rBrArC<00>k_i<5F>k_j<5F>
2026-01-19 15:05:55 +08:00
mu_tilde_i<EFBFBD>
2026-01-20 01:55:46 +08:00
mu_tilde_j<EFBFBD>valuer)<08> num_pairs<72>num_dual_visits<74>E1<45>E2<45>F1<46>F2<46>R1<52>RSrqF)<01> ascendingrhrir@rArBrC<00>q_final<61>E_Si<53>E_Sj<53>E_total<61>k_singlermrnrjrki<><00>k_extra<72>k_single_finalrorp)!<21>copyr2<00>range<67>ilocr\rD<00>appendr5<00>applyr<00>iterrowsr9r<00>pd<70> DataFrame<6D> sort_values<65>set<65>to_dict<63>addrEr+<00>int<6E>locr7r/<00>floor<6F>astype<70>nlargest<73>index<65>get<65>listr=<00>mean)6rT<00>distance_matrix<69>l_max<61>
mu_sum_max<EFBFBD>cv_max<61> merge_ratio<69>sitesr8<00>
candidates<EFBFBD>i<>j<>site_i<5F>site_jr^<00>mu_sum<75> sigma_sq_sumrqrtru<00>_<>row<6F>ratesrvrw<00>df_cand<6E>selected<65>used<65>pair<69>q_star<61>pair_krmrn<00>k_ijrhri<00> total_single<6C>
2026-01-19 15:05:55 +08:00
total_dual<EFBFBD>delta_N<5F> total_demand<6E> remainder<65>
2026-01-20 01:55:46 +08:00
fractional<EFBFBD>top_idx<64>q_factor<6F>site_satisfaction<6F>idx<64>r<>r_i<5F>r_j<5F>shortfall_probsr'<00>p_i<5F>p_jrxrys6 r<00> run_pipeliner<65><00>s<><00><00> <15>M<EFBFBD>M<EFBFBD>O<EFBFBD>E<EFBFBD><17><07>.<2E>5<EFBFBD><14>;<3B>.<2E>E<EFBFBD>$<24>K<EFBFBD> <0B>E<EFBFBD>
2026-01-19 15:05:55 +08:00
<EFBFBD>A<EFBFBD><14>J<EFBFBD> <12>1<EFBFBD>X<EFBFBD><01><16>q<EFBFBD>1<EFBFBD>u<EFBFBD>a<EFBFBD><1F>A<EFBFBD><1A>Z<EFBFBD>Z<EFBFBD><01>]<5D>F<EFBFBD><1A>Z<EFBFBD>Z<EFBFBD><01>]<5D>F<EFBFBD><18><1F>A<EFBFBD><14>.<2E>/<2F>D<EFBFBD><13>|<7C><18><1B>D<EFBFBD>\<5C>F<EFBFBD>4<EFBFBD>L<EFBFBD>0<>F<EFBFBD><15>"<22><18><15>d<EFBFBD>|<7C>f<EFBFBD>$<24><06>t<EFBFBD> <0C>v<EFBFBD>(=<3D><18>!<21>'<27>?<3F>A<EFBFBD>-<2D><06>w<EFBFBD><0F><11>0B<30>B<>L<EFBFBD><18>6<EFBFBD>\<5C>A<EFBFBD>%<25><03>d<EFBFBD>
<EFBFBD>U<EFBFBD>(:<3A>:<3A>S<EFBFBD><<3C>=O<>RX<52>Z[<5B>R[<5B>=[<5B>[<5B>E<EFBFBD> <16> <1D> <1D><1A>#<23>I<EFBFBD>.<2E>V<EFBFBD>I<EFBFBD>=N<> <20><1E>t<EFBFBD> <0C>f<EFBFBD>T<EFBFBD>l<EFBFBD>!<21>'<27>?<3F>v<EFBFBD>g<EFBFBD><EFBFBD><1D>c<EFBFBD>{<7B>6<EFBFBD>#<23>;<3B>$<24>Z<EFBFBD>0<><06>z<EFBFBD>@R<><1E> <0E> <0F>#!<21><16>: <0B>:<3A><EFBFBD>!<21><1B><13>C<EFBFBD>j<EFBFBD>5<EFBFBD><14>;<3B>&<26> +<2B> +<2B> -<2D><02> <10><15>s<EFBFBD><1A>e<EFBFBD>D<EFBFBD>k<EFBFBD>/<2F>/<2F><0E>?<3F>?<3F>%<25><04>+<2B>M<> N<><02>FK<46>n<EFBFBD>n<EFBFBD>FV<46>W<>FV<46>F<EFBFBD>A<EFBFBD>s<EFBFBD><13>S<EFBFBD><18>C<EFBFBD><04>I<EFBFBD>%<25><03>J<EFBFBD><0F>7<>FV<46><05>W<> <1D>e<EFBFBD> $<24><02> <10><15>Z<EFBFBD><02><1A>q<EFBFBD><14>B<EFBFBD>b<EFBFBD><02>!<21>1<EFBFBD>
<EFBFBD>
<EFBFBD> <11>l<EFBFBD>l<EFBFBD>:<3A>&<26>2<>2<>7<EFBFBD>e<EFBFBD>2<>L<>G<EFBFBD><11>H<EFBFBD> <0E>5<EFBFBD>D<EFBFBD><19>"<22>"<22>$<24><06><01>3<EFBFBD> <0E>w<EFBFBD><<3C>t<EFBFBD> #<23><03>G<EFBFBD> <0C>D<EFBFBD>(@<40> <14>O<EFBFBD>O<EFBFBD>C<EFBFBD>K<EFBFBD>K<EFBFBD>M<EFBFBD> *<2A> <10>H<EFBFBD>H<EFBFBD>S<EFBFBD><17>\<5C> "<22> <10>H<EFBFBD>H<EFBFBD>S<EFBFBD><17>\<5C> "<22> %<25><19><04>#<23>D<EFBFBD><16>L<EFBFBD>$<24>y<EFBFBD>/<2F>#'<27><06><<3C><14>i<EFBFBD><1F>!<21>E<01><06> <20><04>Y<EFBFBD><0F>'<27><06><04>V<EFBFBD> <0C>d<EFBFBD>9<EFBFBD>o<EFBFBD>N<><04>V<EFBFBD> <0C>'<27><01>F<EFBFBD>
<EFBFBD>D<EFBFBD><16>L<EFBFBD>$<24>y<EFBFBD>/<2F>R<><04>V<EFBFBD> <0C><1E>v<EFBFBD>,<2C><14>f<EFBFBD><1C>5<><04>Y<EFBFBD><0F> <19><1E>c<EFBFBD>
<EFBFBD><0F><0F>)<29>E<EFBFBD>*<2A><15> <0F>F<EFBFBD><18><04><17><05>;<3B><04>U<EFBFBD> <0B>S<EFBFBD><03><12>3<EFBFBD>s<EFBFBD>C<EFBFBD>=<3D>;<3B>.<2E>/<2F><04> <0F>3<EFBFBD>s<EFBFBD>C<EFBFBD>=<3D> <20><16>s<EFBFBD>C<EFBFBD>=<3D>1<EFBFBD>$<24>D<EFBFBD> <0F>!<21>8<EFBFBD><14>D<EFBFBD><1B>G<EFBFBD>}<7D>d<EFBFBD>7<EFBFBD>m<EFBFBD>u<EFBFBD><05>'*<2A>T<EFBFBD>z<EFBFBD><05> <09> <09>%<25><1A>#<23>$<24>'*<2A>T<EFBFBD>z<EFBFBD><05> <09> <09>%<25><1A>#<23>$<24>9=<3D><06><04>[<5B>!<21>4<EFBFBD> <0B>#4<>5<>6<><19><19><1A>$<24>(<28>(<28>*<2A>L<EFBFBD><14>V<EFBFBD>]<5D>]<5D>_<EFBFBD>%<25>J<EFBFBD><11>\<5C>J<EFBFBD>.<2E>/<2F>G<EFBFBD><0E><11>{<7B><1C>Z<EFBFBD>(<28>,<2C>,<2C>.<2E> <0C>#<23>e<EFBFBD>J<EFBFBD>&7<>7<>,<2C>F<>M<>M<>b<EFBFBD>h<EFBFBD>h<EFBFBD>W<>^<5E>^<5E>_b<5F>c<><05>i<EFBFBD><18><1B>e<EFBFBD>I<EFBFBD>.<2E>2<>2<>4<>4<> <09> <14>q<EFBFBD>=<3D> <20>5<EFBFBD><1A>#4<>4<>|<7C>C<>e<EFBFBD>I<EFBFBD>FV<46>V<>J<EFBFBD> <20>)<29>)<29>#<23>i<EFBFBD>.<2E>9<>?<3F>?<3F>G<EFBFBD> <11>I<EFBFBD>I<EFBFBD>g<EFBFBD>y<EFBFBD>(<28> )<29>Q<EFBFBD> .<2E> )<29>"'<27>
<EFBFBD>"3<>e<EFBFBD>I<EFBFBD>6F<36>"F<><05><1E><1F>"'<27>
<EFBFBD>"3<><05><1E><1F> <10> <20>
!<21>E<EFBFBD>$<24>K<EFBFBD>
/<2F> 4<> 4<> 6<>B<EFBFBD><18><04><15>z<EFBFBD>z<EFBFBD>4<EFBFBD> <0B>,<2C>d<EFBFBD>;<3B>.?<3F>@<40>!<21>D<><04>
<EFBFBD>d<EFBFBD>T<EFBFBD>)<29>_<EFBFBD>$<24>$<24><02><19>
<0A>U<EFBFBD>#<23> $<24>u<EFBFBD>T<EFBFBD>{<7B>'8<>'8<><1E>'H<> H<>5<EFBFBD>QU<51>;<3B> V<> W<>B<EFBFBD><18><04><15>z<EFBFBD>z<EFBFBD>4<EFBFBD> <0B>,<2C>d<EFBFBD>;<3B>.?<3F>@<40>!<21>D<><04><15>f<EFBFBD><1C><04>V<EFBFBD> <0C>,<2C><06>!<21>&<26>)<29><08>
<EFBFBD>d<EFBFBD>X<EFBFBD>o<EFBFBD><04>Y<EFBFBD><0F>/<2F>/<2F><02> <19> <1B><15><19>N<EFBFBD>N<EFBFBD>$<24><08><03>S<EFBFBD>CF<43>z<EFBFBD>?<3F>UV<55>CV<43>C<EFBFBD> <20> !<21>C<EFBFBD><04>I<EFBFBD> -<2D><03>J<EFBFBD><0F> ?<3F>\]<5D><01>,-<2D><19>#<23>i<EFBFBD>.<2E>)<29>%<25><19><04><15>z<EFBFBD>z<EFBFBD>4<EFBFBD> <0B>,<2C>d<EFBFBD>;<3B>.?<3F>@<40>!<21>D<><04>:><3E>|<7C>:L<>q<EFBFBD>:P<>d<EFBFBD>T<EFBFBD>&<26>\<5C>!<21>D<EFBFBD><1C>$6<>6<>VW<56><03>:><3E>|<7C>:L<>q<EFBFBD>:P<>d<EFBFBD>T<EFBFBD>&<26>\<5C>!<21>D<EFBFBD><1C>$6<>6<>VW<56><03><19>$<24>{<7B>+<2B>,<2C><03>3<>,<2C><19>$<24>{<7B>+<2B>,<2C><03>3<>,<2C> <19> <11>"<22>)<29>)<29>+<2B> ,<2C>E<EFBFBD> <19>%<25> <20>B<EFBFBD><1C><13>U<EFBFBD><1A>!<21>B<EFBFBD><18>O<EFBFBD><18><04> <10><19>O<EFBFBD><01>#<23>A<EFBFBD>t<EFBFBD>F<EFBFBD>|<7C>T<EFBFBD>)<29>_<EFBFBD>E<><03>#<23>A<EFBFBD><01>E<EFBFBD>4<EFBFBD><06><<3C><14>i<EFBFBD><1F>I<><03><17><1E><1E>q<EFBFBD>A<EFBFBD><03>G<EFBFBD><01>C<EFBFBD><07>#8<>8<>9<> <19>
2026-01-20 01:55:46 +08:00
&5<><12><17><17><1F> !<21>!<21>B<EFBFBD> <13>c<EFBFBD> <19>B<EFBFBD><19><18>]<5D>%<25><10><02>"<22>B<EFBFBD>b<EFBFBD><02> <06><06><>GXs<00>[ z<============================================================u+Task 3 - Step 7: 敏感性分析 (High Res)<29>task1z03_allocate.xlsxz07_sensitivity.xlsx<73>figureszfig3_sensitivity.pngu站点数据: u 个u基准结果: E1=rtz.0fz, R1=rxz.4fg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g,=V<><56><EFBFBD><EFBFBD>?g{<14>G<EFBFBD>z<EFBFBD>?r.<00>
g<>Y@r#rXi^g\"0<>@<40>g0<67>D<00>?)r<>r<>r<>r<>u
开始参数扫描...zScanning Merge Ratio...r<>)<02>paramrqzScanning Distance Threshold...r<>zScanning Capacity Cap...r<>zScanning CV Threshold...r<>u
2026-01-19 15:05:55 +08:00
绘制敏感性曲线...)<02><00> )<01>figsizezTask 3 Sensitivity Analysis<69><00>bold)<02>fontsize<7A>
2026-01-20 01:55:46 +08:00
fontweight)z Merge Ratio<69>Ratio)zDistance Threshold (l_max)<29>Miles)uCapacity Cap (μ_sum)z lbs (proxy))z CV Threshold<6C>CVr<56>rq<00>-rg<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?zExpected Service (E1))<04> linestyler<00> linewidth<74>labelru<00>ffffff<66>?zQuality-weighted (E2))r<>rr<><00>alphar<61>zService (E1/E2)z--zShortfall Risk (R1)zRisk Probability (R1))r<00>y)<02>axis<69>
labelcolor<EFBFBD>:g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)<04>xrr<>r<><00>best)r<><00>frameonz
Effect of )r<>)rg<><1E><>Q<EFBFBD><51>?r#r<>)<01>recti,)<02>dpi<70> facecoloru图表已保存至: <20>openpyxl)<01>engine<6E> detailed_data)<02>
sheet_namer<EFBFBD>z - <20>d)<06> Parameter<65>E1_RangezE1_Var%<25>E2_RangezE2_Var%<25>R1_Range<67>summaryu数据已保存至: u完成!)r)r)r`rarbrb)j<>__doc__<5F>pandasr<73><00>numpyr/<00>scipyr<00>warnings<67>os<6F>tempfile<6C>pathlibr<00>filterwarnings<67>
2026-01-19 19:38:38 +08:00
gettempdir<EFBFBD>_mpl_config_dir<69>_xdg_cache_dir<69>mkdir<69>environ<6F>
2026-01-20 01:55:46 +08:00
setdefault<EFBFBD>str<74>matplotlib.pyplot<6F>pyplot<6F>pltr <00>MORANDI<44>FIG_BG<42>FIG_GRID<49>rcParams<6D>updaterDr<00>SHORTFALL_THRESHOLDrr+r9r=rErSr<><00>ndarrayr_r<><00>print<6E>__file__<5F>resolve<76>parent<6E>BASE_DIR<49>
2026-01-19 15:05:55 +08:00
SITES_PATH<EFBFBD> OUTPUT_XLSX<53>
2026-01-19 19:38:38 +08:00
OUTPUT_FIG<EFBFBD>
2026-01-20 01:55:46 +08:00
read_excelrTr2r<><00>
BASE_L_MAX<EFBFBD>BASE_MU_SUM_MAX<41> BASE_CV_MAX<41>BASE_MERGE_RATIO<49> base_result<6C>roundr6r\<00> params_config<69> all_results<74>val<61>resr<73><00>
df_results<EFBFBD>subplots<74>fig<69>axes<65>suptitle<6C> param_labels<6C> params_list<73> enumerater<65>r<><00>axr<78><00>data<74>plot<6F>line1<65>line2<65>
2026-01-19 15:05:55 +08:00
set_xlabel<EFBFBD>
2026-01-20 01:55:46 +08:00
set_ylabel<EFBFBD>twinx<6E>ax2<78>line3<65> tick_params<6D>base_val<61>axvline<6E>lines<65> get_label<65>labels<6C>legend<6E> set_titler <00> tight_layout<75>savefig<69> ExcelWriter<65>writer<65>to_excelr<6C><00>subr<00>max)<01>ls0r<00><module>r7s* <00><01> <04><14><12><17><0F> <09><0F><18><08><17><17><08>!<21><17>x<EFBFBD>*<2A>*<2A>,<2C>-<2D>0D<30>D<><0F><15>h<EFBFBD>)<29>)<29>+<2B>,<2C>/C<>C<><0E><0F><15><15>d<EFBFBD>T<EFBFBD><15>2<><0E><14><14>T<EFBFBD>D<EFBFBD><14>1<><02>
2026-01-19 19:38:38 +08:00
<EFBFBD>
<EFBFBD><15><15>n<EFBFBD>c<EFBFBD>/<2F>&:<3A>;<3B><02>
<EFBFBD>
2026-01-20 01:55:46 +08:00
<EFBFBD><15><15>&<26><03>N<EFBFBD>(;<3B><<3C><1F><19> <16> <15><1B> <20> <15><1B><1A> <02><07>
<13><06> <14><08><03> <0C> <0C><13><13><06><1A>F<EFBFBD><06><18>&<26><06> <1C>V<EFBFBD><06> <19>(<28> <06>
<1A>7<EFBFBD>6<EFBFBD>?<3F> <06> <16>w<EFBFBD>v<EFBFBD><EFBFBD> <06> <16>w<EFBFBD>v<EFBFBD><EFBFBD><06> <15>g<EFBFBD>f<EFBFBD>o<EFBFBD><06> <15>h<EFBFBD><06> <15>d<EFBFBD><06> <14>T<EFBFBD><06> <1A>6<EFBFBD> <13><17> <0C>%<25><17><06><0F><17> <0C>%<25><17> <0B>$<24>  <0E>
<EFBFBD><06>* <19>$<24>+<06>, <1C>S<EFBFBD>-<06>. <1B>F<EFBFBD>/<06>0 <1B>H<EFBFBD>1<06>2 <1A>H<>3<06>4 <1D>e<EFBFBD>5<06><02>D<08><01><17><11><19><13>K<01>\<01> {<01>><3E> I<01>
2026-01-19 15:05:55 +08:00
O<01> <10>b<EFBFBD>l<EFBFBD>l<EFBFBD> <10>r<EFBFBD>z<EFBFBD>z<EFBFBD> <10> R<06>n<06>h<EFBFBD><0F><05>3<>4<><05>h<EFBFBD><0F> <10><08>><3E> !<21> !<21> #<23> *<2A> *<2A><08> <15>_<EFBFBD>_<EFBFBD>w<EFBFBD> &<26>);<3B> ;<3B>
<EFBFBD><16>.<2E>.<2E> <0B> <15> <09> !<21>$:<3A> :<3A>
<EFBFBD>
<EFBFBD><11><11><17><17><04>t<EFBFBD><17>4<> <0A>=<3D>=<3D><1A> $<24><08><05><0E>s<EFBFBD>8<EFBFBD>}<7D>o<EFBFBD>T<EFBFBD>*<2A>+<2B>*<2A>(<28>3<><0F><10>
<EFBFBD><15><0F><11> <0B><16><10><1B>8<EFBFBD>_<EFBFBD>j<EFBFBD>/<2F>S^<5E>`p<>q<> <0B><05><19>+<2B>d<EFBFBD>+<2B>C<EFBFBD>0<><05>k<EFBFBD>$<24>6G<36><03>5L<35>M<>N<><16>8<EFBFBD>8<EFBFBD>B<EFBFBD>I<EFBFBD>I<EFBFBD>d<EFBFBD>K<EFBFBD><14>><3E><01>B<> <0F>Y<EFBFBD>Y<EFBFBD>r<EFBFBD>:<3A>q<EFBFBD><05> 6<><14>)<29>)<29>C<EFBFBD><1A>Q<EFBFBD>e<EFBFBD><<3C><10>h<EFBFBD>h<EFBFBD>r<EFBFBD>y<EFBFBD>y<EFBFBD><14>{<7B>D<EFBFBD>9<>1<EFBFBD>=<3D> <02> <0A><11> <0B><06><1F> <20><06><1F> <20> <18><1D> '<27>C<EFBFBD>
<16>x<EFBFBD><1F>*<2A>o<EFBFBD>{<7B>\_<>
`<60>C<EFBFBD><07>J<EFBFBD>J<EFBFBD><1D><13>5<>6<><0F><16><16>s<EFBFBD><1B> (<28> <06>&<26>'<27> <18><17> !<21>C<EFBFBD>
<16>x<EFBFBD><1F>#<23><EFBFBD> <0B>Ue<55>
f<EFBFBD>C<EFBFBD><07>J<EFBFBD>J<EFBFBD><17>3<EFBFBD>/<2F>0<><0F><16><16>s<EFBFBD><1B> "<22> <06> <20>!<21> <18><1C> &<26>C<EFBFBD>
<16>x<EFBFBD><1F>*<2A>c<EFBFBD>;<3B>P`<60>
a<EFBFBD>C<EFBFBD><07>J<EFBFBD>J<EFBFBD><1C><03>4<>5<><0F><16><16>s<EFBFBD><1B> '<27> <06> <20>!<21> <18><18> "<22>C<EFBFBD>
<16>x<EFBFBD><1F>*<2A>o<EFBFBD>s<EFBFBD>Td<54>
e<EFBFBD>C<EFBFBD><07>J<EFBFBD>J<EFBFBD><18>C<EFBFBD>0<>1<><0F><16><16>s<EFBFBD><1B> #<23> <10>\<5C>\<5C>+<2B> &<26>
<EFBFBD>
2026-01-19 19:38:38 +08:00
<06>"<22>#<23> <0F>L<EFBFBD>L<EFBFBD><11>A<EFBFBD>x<EFBFBD> 0<> <09><03>T<EFBFBD><03> <0C> <0C> *<2A>R<EFBFBD>F<EFBFBD> <0C>K<>,<2C> 4<>:<3A>$<24> <02> <0C>?<3F> <0B><19>+<2B>&<26>H<EFBFBD>A<EFBFBD>u<EFBFBD> <0A>a<EFBFBD>1<EFBFBD>f<EFBFBD>a<EFBFBD>!<21>e<EFBFBD>m<EFBFBD> <1C>B<EFBFBD> <15>j<EFBFBD><17>)<29>U<EFBFBD>2<> 3<> ?<3F> ?<3F><07> H<>D<EFBFBD><10>W<EFBFBD>W<EFBFBD> <0C>W<EFBFBD> <0A> <0C>T<EFBFBD>
<EFBFBD><15><15>'<27>(<28><15>%<25> <15><06>F<EFBFBD>E<EFBFBD><10>W<EFBFBD>W<EFBFBD> <0C>W<EFBFBD> <0A> <0C>T<EFBFBD>
<EFBFBD><15><15>f<EFBFBD>o<EFBFBD><15><12>%<25><15><06>F<EFBFBD>E<EFBFBD><07>M<EFBFBD>M<EFBFBD>,<2C>u<EFBFBD>%<25>a<EFBFBD>(<28>)<29><06>M<EFBFBD>M<EFBFBD>#<23>$<24> <0A>(<28>(<28>*<2A>C<EFBFBD> <10>X<EFBFBD>X<EFBFBD> <0C>W<EFBFBD> <0A> <0C>T<EFBFBD>
2026-01-20 01:55:46 +08:00
<EFBFBD><16><15>l<EFBFBD>#<23><15>#<23> <16><06>F<EFBFBD>E<EFBFBD><08>N<EFBFBD>N<EFBFBD>*<2A>'<27>,<2C>2G<32>N<EFBFBD>H<><07>O<EFBFBD>O<EFBFBD><13><17><1C>)><3E>O<EFBFBD>?<3F> <0A> <0A><1D>#<23><08> <0E>'<27> <19><1D><08> <0E>,<2C> <1E>"<22><08> <0E>(<28> <1A><1E><08><06>J<EFBFBD>J<EFBFBD><18><17><1B>!5<><13>D<EFBFBD>J<EFBFBD>Q<><13>E<EFBFBD>5<EFBFBD> !<21>E<EFBFBD>%*<2A> +<2B>U<EFBFBD><01>k<EFBFBD>k<EFBFBD>m<EFBFBD>U<EFBFBD> +<2B>F<EFBFBD><06>I<EFBFBD>I<EFBFBD>e<EFBFBD>V<EFBFBD><16><14>I<EFBFBD>6<><06>L<EFBFBD>L<EFBFBD>:<3A>l<EFBFBD>5<EFBFBD>1<>!<21>4<>5<>6<>7<><06>G<EFBFBD>G<EFBFBD>D<EFBFBD><04>G<EFBFBD><1D>q'<27>t<04><10><10>(<28>)<29><03> <0B> <0B>J<EFBFBD>C<EFBFBD>6<EFBFBD>2<><05><1C>Z<EFBFBD>L<EFBFBD>)<29>*<2A>
2026-01-19 15:05:55 +08:00
<08>^<5E>^<5E>K<EFBFBD>
<EFBFBD>3<>v<EFBFBD><0E><17><17><06>?<3F>%<25><17>H<><11>G<EFBFBD><1C><05><18><1A>G<EFBFBD>,<2C><05>5<>6<><03><0F><0E><0E><1E><1E>t<EFBFBD>9<EFBFBD>=<3D>=<3D>?<3F>3<EFBFBD>/<2F>s<EFBFBD>3<EFBFBD>t<EFBFBD>9<EFBFBD>=<3D>=<3D>?<3F>3<EFBFBD>2G<32>H<><1B>D<EFBFBD> <09> <0A> <0A><0F>#<23>d<EFBFBD>)<29>-<2D>-<2D>/<2F>9<>[<5B><14>=N<>N<>QT<51>T<><1E>t<EFBFBD>9<EFBFBD>=<3D>=<3D>?<3F>3<EFBFBD>/<2F>s<EFBFBD>3<EFBFBD>t<EFBFBD>9<EFBFBD>=<3D>=<3D>?<3F>3<EFBFBD>2G<32>H<><1B>D<EFBFBD> <09> <0A> <0A><0F>#<23>d<EFBFBD>)<29>-<2D>-<2D>/<2F>9<>[<5B><14>=N<>N<>QT<51>T<><1E>t<EFBFBD>9<EFBFBD>=<3D>=<3D>?<3F>3<EFBFBD>/<2F>s<EFBFBD>3<EFBFBD>t<EFBFBD>9<EFBFBD>=<3D>=<3D>?<3F>3<EFBFBD>2G<32>H<> 
2026-01-20 01:55:46 +08:00
<EFBFBD> <0B><1D><07>L<EFBFBD>L<EFBFBD><17><19>"<22>"<22>6<EFBFBD>i<EFBFBD>u<EFBFBD>"<22>M<>4<>"<06><1C>[<5B>M<EFBFBD>*<2A>+<2B><05>i<EFBFBD><10><>?,<2C>4<>3<>s<00>3]%<06>D9]*<03>*
]8