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

143 lines
19 KiB
Plaintext
Raw Normal View History

2026-01-19 15:05:55 +08:00
<EFBFBD>
2026-01-19 19:38:38 +08:00
:ni|><00> <00><00>SrSSKrSSKrSSKJr SSKrSSKrSSK r SSK
J r \R"S5 \ "\ R"55S- r\ "\ R"55S- r\R!SSS 9 \R!SSS 9 \R"R%S
\"\55 \R"R%S \"\55 SSKJr SS KJr S SSSSSSSS.r\R2R50S\S_S\S_S\S_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/\S_S0/S1Q_S2S30E5 S4rS5rS6rS7rS8rS9r S<>S:jr!S<>S;jr"S<r#S=\RHS>\RJ4S?jr&S<>SCjr'\("SD5 \("SE5 \("SD5 \ "\)5RU5RVr,\,RVSF- SG- r-\,SH- r.\,SI- SJ- r/\/RVR!SSS 9 \R`"\-5r1\("SK\2"\15SL35 \&"\15r3S@r4SAr5SBr6SBr7\'"\1\3\4\5\6\75r8\("SM\8SNSOSP\8SQSR35 \Rr"\Rt"SSSTSU5SV5\Rt"SWSXSY\;SZ9\Rt"S[S\S]\;SZ9\Rr"\Rt"SSS^SU5SV5S_.r</r=\("S`5 \("Sa5 \<SbH5r>\'"\1\3\4\5\6\>5r?\?R5Sb\>Sc.5 \=R<>\?5 M7 \("Sd5 \<SeH5r>\'"\1\3\>\5\6\75r?\?R5Se\>Sc.5 \=R<>\?5 M7 \("Sf5 \<SgH5r>\'"\1\3\4\>\6\75r?\?R5Sg\>Sc.5 \=R<>\?5 M7 \("Sh5 \<SiH5r>\'"\1\3\4\5\>\75r?\?R5Si\>Sc.5 \=R<>\?5 M7 \RH"\=5rA\("Sj5 \R<>"SVSVSkSl9urCrD\CR<43>SmSnSoSp9 SqSrSsStS_.rF/S_QrG\H"\G5GH<>urIrJ\D\ISV-\ISV-4rK\A\ASu\J:HR<>Sv5rM\KR<4B>\MSv\MSNSw\SxSySzS{9urO\KR<4B>\MSv\MS|Sw\S(SyS}S~S9urP\KR<4B>\F\JS5 \KR<4B>S<>5 \KR<4B>5rT\TR<54>\MSv\MSQS<>\S)SyS<79>S{9urU\TR<54>S<>\S)S<>9 \TR<54>S<>\S)S<>9 \JSb:Xa\7rWO\JSe:Xa\4rWO\JSg:Xa\5rWO\JSi:Xa\6rW\KR<4B>\W\S*S<>S<EFBFBD>S<EFBFBD>9 \O\P\U/rY\YVs/sHoR<>5PM snr[\KR<4B>\Y\[S<>SS<>9 \KR<4B>S<>\F\JS35 \KR<4B>SS#S<>9 GM<> \R<>"/S<>QS<>9 \R<>"\/S<>S<EFBFBD>9 \("S<>\/35 \R<>"\.S<>S<EFBFBD>9rb\AR<41>\bS<62>S3S<33>9 /rd\GH<>rJ\A\ASu\J:Hre\dR<64>\J\eSNR<>5SOS<>\eSNR<>5SO3\eSNR<>5\eSNR<>5-
\8SN- S<>-\eS|R<>5SOS<>\eS|R<>5SO3\eS|R<>5\eS|R<>5-
\8S|- S<>-\eSQR<>5SRS<>\eSQR<>5SR3S<>.5 GM \RH"\d5R<>\bS<62>S3S<33>9 SSS5 \("S<>\.35 \("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-19 19:38:38 +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#F5F2EDz#D7D1C7z#3F3F3Fz#8FA3A7z#6E858Az#AEB8A6z#B07A6Az#8C857A)<08>bg<62>grid<69>text<78>
muted_blue<EFBFBD>muted_blue_dark<72>sage<67>
terracotta<EFBFBD> warm_grayzfigure.facecolorr zaxes.facecolorzsavefig.facecolorzaxes.edgecolorrzaxes.labelcolorrz xtick.colorz ytick.colorz
text.colorz
grid.colorz
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_factorr Ws <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-19 19:38:38 +08:00
--$<00>Nr<00>)rr<00>norm<72>cdf<64>pdf)<04>q<>mu<6D>sigma<6D>zs r<00>expected_servicer,Zsk<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-19 19:38:38 +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-19 19:38:38 +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>nr5s r<00>gini_coefficientr:`s<><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-19 19:38:38 +08:00
$r#)rr%r&)r(r)r*<00> threshold<6C>critical_demands r<00>shortfall_probabilityr>jsD<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_allocationrFps.<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-19 19:38:38 +08:00
nS[R"US-[R"U5U-S--5-$)Nr/<00>@Q@)r0<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_distancerTusZ<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-19 19:38:38 +08:00
"U5U-S--5-n[R "US5 U$)N<>lat<61><01>dtype<70>long@rHr/g)<07>to_numpy<70>floatr0rIrJrK<00> fill_diagonal)rUrXr[rPrQrRrS<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-19 19:38:38 +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-19 19:38:38 +08:00
r*r)<00>cvr$r/rg333333<33>?rc<00>site_id<69>k<>mu_tilde)<0E>idx_i<5F>idx_j<5F> site_i_id<69> site_j_id<69>distancerArCrBrD<00>k_i<5F>k_j<5F>
2026-01-19 15:05:55 +08:00
mu_tilde_i<EFBFBD>
2026-01-19 19:38:38 +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>RSrrF)<01> ascendingrirjrArBrCrD<00>q_final<61>E_Si<53>E_Sj<53>E_total<61>k_singlernrorkrli<><00>k_extra<72>k_single_finalrprq)!<21>copyr3<00>range<67>ilocr]rE<00>appendr6<00>applyr <00>iterrowsr:r<00>pd<70> DataFrame<6D> sort_values<65>set<65>to_dict<63>addrFr,<00>int<6E>locr8r0<00>floor<6F>astype<70>nlargest<73>index<65>get<65>listr><00>mean)6rU<00>distance_matrix<69>l_max<61>
mu_sum_max<EFBFBD>cv_max<61> merge_ratio<69>sitesr9<00>
candidates<EFBFBD>i<>j<>site_i<5F>site_jr_<00>mu_sum<75> sigma_sq_sumrrrurv<00>_<>row<6F>ratesrwrx<00>df_cand<6E>selected<65>used<65>pair<69>q_star<61>pair_krnro<00>k_ijrirj<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-19 19:38:38 +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_jryrzs6 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-19 19:38:38 +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=ruz.0fz, R1=ryz.4fg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g,=V<><56><EFBFBD><EFBFBD>?g{<14>G<EFBFBD>z<EFBFBD>?r/<00>
g<>Y@r$rYi^g\"0<>@<40>g0<67>D<00>?)r<>r<>r<>r<>u
开始参数扫描...zScanning Merge Ratio...r<>)<02>paramrrzScanning 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-19 19:38:38 +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>rr<00>-rg<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?zExpected Service (E1))<04> linestyler<00> linewidth<74>labelrv<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,)<01>dpiu图表已保存至: <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)rarbrcrc)h<>__doc__<5F>pandasr<73><00>numpyr0<00>scipyr<00>warnings<67>os<6F>tempfile<6C>pathlibr<00>filterwarnings<67>
gettempdir<EFBFBD>_mpl_config_dir<69>_xdg_cache_dir<69>mkdir<69>environ<6F>
setdefault<EFBFBD>str<74>matplotlib.pyplot<6F>pyplot<6F>pltr <00>MORANDI<44>rcParams<6D>updaterEr<00>SHORTFALL_THRESHOLDr r,r:r>rFrTr<><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>
read_excelrUr3r<><00>
BASE_L_MAX<EFBFBD>BASE_MU_SUM_MAX<41> BASE_CV_MAX<41>BASE_MERGE_RATIO<49> base_result<6C>roundr7r]<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-19 19:38:38 +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>r5s= <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>
<EFBFBD>
<EFBFBD><15><15>n<EFBFBD>c<EFBFBD>/<2F>&:<3A>;<3B><02>
<EFBFBD>
<EFBFBD><15><15>&<26><03>N<EFBFBD>(;<3B><<3C><1F><19> <14> <15> <15><1B> <20> <15><1B><1A> <02><07><04> <0C> <0C><13><13><06><1A>G<EFBFBD>D<EFBFBD>M<EFBFBD><06><18>'<27>$<24>-<2D><06> <1C>W<EFBFBD>T<EFBFBD>]<5D><06> <19>'<27>&<26>/<2F> <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>g<EFBFBD>f<EFBFBD>o<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>G<EFBFBD>D<EFBFBD>M<EFBFBD>/<06>0 <1B>G<EFBFBD>F<EFBFBD>O<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>
<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> <20><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-19 19:38:38 +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>]6<06>!D9];<03>;
^