গণিত 186 (লোভী) এবং 224 (সমস্ত সংমিশ্রণ)
লোভী সমাধান
t=MorphologicalTransform;n@w_:=Flatten@w~Count~1
p_~w~q_:=n[p~t~Max]==n[q~t~Max]
g@m_:=Module[{l=m~Position~1,r,d=m},While[l!={},If[w[m,r=ReplacePart[d,#-> 0]&
[l[[1]]]],d=r];l=Rest@l];n@m-n@d]
এটি একের পর এক অতিরিক্ত অতিরিক্ত আলোকসজ্জা বন্ধ করে দেয়। আলো বন্ধ হয়ে গেলে যদি আলোর কভারেজটি হ্রাস না করা হয় তবে সেই আলো দূর করা যেতে পারে। লোভী পদ্ধতির খুব দ্রুত এবং সহজেই 15x15 এর ম্যাট্রিকগুলি হ্যান্ডেল করতে পারে এবং আরও বড় (নীচে দেখুন)। এটি একটি একক সমাধান দেয়, তবে এটি অপটিমাল কিনা তা অজানা। উভয় পন্থা, গল্ফযুক্ত সংস্করণগুলিতে, অব্যবহৃত আলোগুলির সংখ্যা প্রদান করে। নীচে যেমন-গল্ফযুক্ত পদ্ধতিগুলি গ্রিডগুলিও প্রদর্শন করে as
আগে:
পরে:
সমস্ত আলোকসজ্জার (224 টি অক্ষর) ব্যবহার করে অনুকূল সমাধানগুলি
ধন্যবাদ @ ক্ল্যামেন্টের সাথে।
আলোকসজ্জার সমস্ত সংমিশ্রণ ব্যবহার করে অসম্পূর্ণ সংস্করণ
f sameCoverageQ
আলোকিত রূপান্তর ফাংশনটি লিটার হিসাবে ব্যবহার করা হয় (শূন্যের পরিবর্তে মান = 1) 3 এক্স 3 বর্গ যেখানে প্রতিটি আলো থাকে। খামারটি গণনা করা হয়েছে; একাধিক প্রদীপের দ্বারা প্রজ্জিত একটি বর্গক্ষেত্রটি কেবল প্রজ্বলিত হয় program প্রোগ্রামটি প্রতিটি আলো বন্ধ করে দেয় এবং ফার্মের সামগ্রিক আলোক কভারেজ হ্রাস পেয়েছে কিনা তা পরীক্ষা করে দেখায় it যদি এটি না হয় তবে সেই আলো অপসারণ করা হয়।
nOnes[w_]:=Count[Flatten@w,1]
sameCoverageQ[m1_,m2_]:=nOnes[MorphologicalTransform[m1,Max]]==
nOnes[MorphologicalTransform[m2,Max]]
(*draws a grid with light bulbs *)
h[m_]:=Grid[m/.{1-> Style[\[LightBulb],24],0-> ""},Frame-> All,ItemSize->{1,1.5}]
c[m1_]:=GatherBy[Cases[{nOnes[MorphologicalTransform[ReplacePart[Array[0&,Dimensions[m1]],
#/.{{j_Integer,k_}:> {j,k}-> 1}],Max]],#,Length@#}&/@(Rest@Subsets[Position[m1,1]]),
{nOnes[MorphologicalTransform[m1,Max]],_,_}],Last][[1,All,2]]
nOnes[matrix]
পতাকাঙ্কিত কক্ষগুলির সংখ্যা গণনা করে। এটি লাইটগুলি গণনা করতে এবং লিটার সেলগুলি গণনা করতে ব্যবহৃত হয়
sameCoverageQ[mat1, mat2]
ম্যাট 1 তে লিটার কোষগুলি ম্যাট 2-তে লিটার কোষের সমান কিনা তা পরীক্ষা করে M রূপকেন্দ্রিক ট্রান্সফর্ম [[মাদুর] লাইটের একটি ম্যাট্রিক্স গ্রহণ করে এবং তারা আলোকিত করে এমন কোষগুলির একটি ম্যাট্রিক্স প্রদান করে।
c[m1]
এম 1 থেকে সমস্ত আলোকসজ্জা গ্রহণ করে এবং সেগুলি কভারেজের জন্য পরীক্ষা করে। যাদের সর্বাধিক কভারেজ রয়েছে তাদের মধ্যে এটি সবচেয়ে কম হালকা বাল্ব রয়েছে এমনগুলি নির্বাচন করে। এগুলির প্রত্যেকটিই একটি অনুকূল সমাধান।
উদাহরণ 1:
একটি 6x6 সেটআপ
(*all the lights *)
m=Array[RandomInteger[4]&,{6,6}]/.{2-> 0,3->0,4->0}
h[m]
সমস্ত অনুকূল সমাধান।
(*subsets of lights that provide full coverage *)
h/@(ReplacePart[Array[0&,Dimensions[m]],#/.{{j_Integer,k_}:> {j,k}-> 1}]&/@(c[m]))
আলোর সমস্ত সংমিশ্রণ ব্যবহার করে গল্ফযুক্ত সংস্করণ।
এই সংস্করণটি অব্যবহৃত আলোগুলির সংখ্যা গণনা করে। এটি গ্রিডগুলি প্রদর্শন করে না।
c
অব্যবহৃত আলোগুলির সংখ্যা প্রদান করে।
n@w_:=Flatten@w~Count~1;t=MorphologicalTransform;
c@r_:=n@m-GatherBy[Cases[{n@t[ReplacePart[Array[0 &,Dimensions[r]],#
/.{{j_Integer,k_}:> {j,k}-> 1}],Max],#,Length@#}&/@(Rest@Subsets[r~Position~1]),
{n[r~t~Max],_,_}],Last][[1,1,3]]
n[matrix]
পতাকাঙ্কিত কক্ষগুলির সংখ্যা গণনা করে। এটি লাইটগুলি গণনা করতে এবং লিটার সেলগুলি গণনা করতে ব্যবহৃত হয়
s[mat1, mat2]
ম্যাট 1 তে লিটার কোষগুলি ম্যাট 2.t এর লিটার কোষের সমান কিনা তা পরীক্ষা করে [[মাদুর] একটি ম্যাট্রিক্স লাইট নেয় এবং তারা আলোকিত করে এমন কোষগুলির একটি ম্যাট্রিক্স প্রদান করে।
c[j]
জে থেকে সমস্ত আলোকসজ্জা নেয় এবং কভারেজের জন্য তাদের পরীক্ষা করে। যাদের সর্বাধিক কভারেজ রয়েছে তাদের মধ্যে এটি সবচেয়ে কম হালকা বাল্ব রয়েছে এমনগুলি নির্বাচন করে। এগুলির প্রত্যেকটিই একটি অনুকূল সমাধান।
উদাহরণ 2
m=Array[RandomInteger[4]&,{6,6}]/.{2-> 0,3->0,4->0};
m//Grid
একই আলো কভারেজ থাকার সময় দুটি লাইট সংরক্ষণ করা যায়। সেমি]
2