python3 <<'PY' import math,random a=0.25; b=1.0/12 def Aval(y1,y2,q,r): alpha=2*a+2*b-y1-y2; mu1=a+b-y1; nu1=a+b; q2=alpha-q if q<=0 or q2<=0: return -1 lo=max(0.0,q-(alpha-mu1)); hi=min(q,mu1) if rhi+1e-12: return -1 den=r*q2/q-(mu1-r) if abs(den)<1e-14: return -1 c=(a*q2-(mu1-r)*nu1)/den if c<-1e-10 or c>q+1e-10 or c>nu1+1e-10 or nu1-c>q2+1e-10: return -1 r2=mu1-r; c2=nu1-c return (math.sqrt(max(0,a*r*c))+math.sqrt(max(0,b*r*(q-c)))+math.sqrt(max(0,b*(q-r)*c))+math.sqrt(max(0,a*(q-r)*(q-c)))+math.sqrt(max(0,a*r2*c2))+math.sqrt(max(0,b*r2*(q2-c2)))+math.sqrt(max(0,b*(q2-r2)*c2))+math.sqrt(max(0,a*(q2-r2)*(q2-c2)))) def best2(y1,y2,N=200): alpha=2*a+2*b-y1-y2; mu1=a+b-y1; mu2=alpha-mu1 best=-1 for iq in range(1,N): q=alpha*iq/N lo=max(0.0,q-mu2); hi=min(q,mu1) for ir in range(N+1): r=lo+(hi-lo)*ir/N v=Aval(y1,y2,q,r) if v>best: best=v return best def best3(y1,y2,N=300000): alpha=2*a+2*b-y1-y2; mu1=a+b-y1; mu2=alpha-mu1; nu1=a+b best=-1 for _ in range(N): # random q1,q2 via breakpoints r1=random.random(); r2=random.random() if r1>r2: r1,r2=r2,r1 q=[alpha*r1,alpha*(r2-r1),alpha*(1-r2)] # allocate a_i sum mu1 with 0<=a_i<=q_i s1=random.random(); s2=random.random() if s1>s2: s1,s2=s2,s1 aa=[mu1*s1,mu1*(s2-s1),mu1*(1-s2)] if any(aa[i]>q[i]+1e-12 for i in range(3)): continue t1=random.random(); t2=random.random() if t1>t2: t1,t2=t2,t1 cc=[nu1*t1,nu1*(t2-t1),nu1*(1-t2)] if any(cc[i]>q[i]+1e-12 for i in range(3)): continue # adjust c3 to satisfy m11 if aa[2]<1e-14: continue target=a - aa[0]*cc[0]/q[0] - aa[1]*cc[1]/q[1] c3=target*q[2]/aa[2] if c3<-1e-10 or c3>q[2]+1e-10: continue cc[2]=c3 if sum(cc)<-1e-9 or sum(cc)>nu1+1e-9: continue # if sum cc not exact nu1, we varied c1/c2 so sum=nu1-c3 with original cc3 discarded; need c1+c2+c3=nu1 if abs(cc[0]+cc[1]+c3-nu1)>1e-9: continue val=0.0 for i in range(3): qi=q[i]; ai=aa[i]; ci=cc[i] bi=qi-ai; di=qi-ci val+=math.sqrt(max(0,a*ai*ci))+math.sqrt(max(0,b*ai*di))+math.sqrt(max(0,b*bi*ci))+math.sqrt(max(0,a*bi*di)) if val>best: best=val return best for y1,y2 in [(0.02,0.22),(0.0,0.2),(0.01,0.24),(0.04,0.23)]: print(y1,y2,"b2",best2(y1,y2,120),"b3",best3(y1,y2,100000)) PY