कहें कि आपके पास शिपमेंट है। इसे बिंदु ए से बिंदु बी तक जाने की आवश्यकता है, बिंदु बी को बिंदु बी पर इंगित करें और आखिरकार सी को इंगित करने के लिए बिंदु को इंगित करें। आपको कम से कम धनराशि के लिए पांच दिनों में वहां पहुंचने की आवश्यकता है। वहाँ प्रत्येक पैर के लिए तीन संभावित वाहक, प्रत्येक प्रत्येक पैर के लिए अपने स्वयं के अलग अलग समय और लागत के साथ कर रहे हैं:एकाधिक सेटों के दिए गए सेट से सबसे अच्छा संयोजन खोजें
Array
(
[leg0] => Array
(
[UPS] => Array
(
[days] => 1
[cost] => 5000
)
[FedEx] => Array
(
[days] => 2
[cost] => 3000
)
[Conway] => Array
(
[days] => 5
[cost] => 1000
)
)
[leg1] => Array
(
[UPS] => Array
(
[days] => 1
[cost] => 3000
)
[FedEx] => Array
(
[days] => 2
[cost] => 3000
)
[Conway] => Array
(
[days] => 3
[cost] => 1000
)
)
[leg2] => Array
(
[UPS] => Array
(
[days] => 1
[cost] => 4000
)
[FedEx] => Array
(
[days] => 1
[cost] => 3000
)
[Conway] => Array
(
[days] => 2
[cost] => 5000
)
)
)
आप प्रोग्राम सबसे अच्छा संयोजन खोजने के बारे में कैसे जाना होगा?
मेरे सबसे अच्छे प्रयास अब तक (तीसरे या चौथे एल्गोरिथ्म) है:
- प्रत्येक पैर
- के लिए सबसे लंबे समय तक शिपर का पता लगाएं हटा सबसे "महंगा" एक
- प्रत्येक पैर के लिए सबसे सस्ता शिपर का पता लगाएं
- की गणना कुल लागत & दिनों
- दिनों कर रहे हैं स्वीकार्य, खत्म, बाकी, गोटो 1
PHP में जल्दी मज़ाक उड़ाया-अप (ध्यान दें कि परीक्षण सरणी नीचे कामयाबी से काम करता है, लेकिन यदि आप इसे ऊपर से परीक्षण सरणी के साथ प्रयास करें, यह सही संयोजन नहीं मिल रहा है):
$shippers["leg1"] = array(
"UPS" => array("days" => 1, "cost" => 4000),
"Conway" => array("days" => 3, "cost" => 3200),
"FedEx" => array("days" => 8, "cost" => 1000)
);
$shippers["leg2"] = array(
"UPS" => array("days" => 1, "cost" => 3500),
"Conway" => array("days" => 2, "cost" => 2800),
"FedEx" => array("days" => 4, "cost" => 900)
);
$shippers["leg3"] = array(
"UPS" => array("days" => 1, "cost" => 3500),
"Conway" => array("days" => 2, "cost" => 2800),
"FedEx" => array("days" => 4, "cost" => 900)
);
$times = 0;
$totalDays = 9999999;
print "<h1>Shippers to Choose From:</h1><pre>";
print_r($shippers);
print "</pre><br />";
while($totalDays > $maxDays && $times < 500){
$totalDays = 0;
$times++;
$worstShipper = null;
$longestShippers = null;
$cheapestShippers = null;
foreach($shippers as $legName => $leg){
//find longest shipment for each leg (in terms of days)
unset($longestShippers[$legName]);
$longestDays = null;
if(count($leg) > 1){
foreach($leg as $shipperName => $shipper){
if(empty($longestDays) || $shipper["days"] > $longestDays){
$longestShippers[$legName]["days"] = $shipper["days"];
$longestShippers[$legName]["cost"] = $shipper["cost"];
$longestShippers[$legName]["name"] = $shipperName;
$longestDays = $shipper["days"];
}
}
}
}
foreach($longestShippers as $leg => $shipper){
$shipper["totalCost"] = $shipper["days"] * $shipper["cost"];
//print $shipper["totalCost"] . " <?> " . $worstShipper["totalCost"] . ";";
if(empty($worstShipper) || $shipper["totalCost"] > $worstShipper["totalCost"]){
$worstShipper = $shipper;
$worstShipperLeg = $leg;
}
}
//print "worst shipper is: shippers[$worstShipperLeg][{$worstShipper['name']}]" . $shippers[$worstShipperLeg][$worstShipper["name"]]["days"];
unset($shippers[$worstShipperLeg][$worstShipper["name"]]);
print "<h1>Next:</h1><pre>";
print_r($shippers);
print "</pre><br />";
foreach($shippers as $legName => $leg){
//find cheapest shipment for each leg (in terms of cost)
unset($cheapestShippers[$legName]);
$lowestCost = null;
foreach($leg as $shipperName => $shipper){
if(empty($lowestCost) || $shipper["cost"] < $lowestCost){
$cheapestShippers[$legName]["days"] = $shipper["days"];
$cheapestShippers[$legName]["cost"] = $shipper["cost"];
$cheapestShippers[$legName]["name"] = $shipperName;
$lowestCost = $shipper["cost"];
}
}
//recalculate days and see if we are under max days...
$totalDays += $cheapestShippers[$legName]['days'];
}
//print "<h2>totalDays: $totalDays</h2>";
}
print "<h1>Chosen Shippers:</h1><pre>";
print_r($cheapestShippers);
print "</pre>";
मुझे लगता है कि मुझे वास्तव में कुछ प्रकार की चीज करना पड़ सकता है जहां मैं सचमुच प्रत्येक संयोजन को एक-एक करके (लूप की श्रृंखला के साथ) जोड़ता हूं और प्रत्येक का कुल "स्कोर" जोड़ता हूं, और सबसे अच्छा पाते हैं ....
संपादित करें: स्पष्टीकरण के लिए, यह "होमवर्क" असाइनमेंट नहीं है (मैं स्कूल में नहीं हूं)। यह काम पर मेरी वर्तमान परियोजना का हिस्सा है।
आवश्यकताएं (हमेशा के रूप में) लगातार बदल रही हैं। अगर मुझे इस समस्या पर काम करना शुरू करने पर वर्तमान बाधाएं दी गईं, तो मैं ए * एल्गोरिदम (या डिजस्ट्रा या सबसे छोटा पथ या सरल या कुछ) के कुछ संस्करण का उपयोग कर रहा हूं। लेकिन सब कुछ मोर्फ़िंग और बदल रहा है, और यह मुझे उस स्थान पर लाता है जहां मैं अभी हूं।
तो मुझे लगता है कि इसका मतलब है कि मुझे इस बिंदु पर किए गए सभी बकवासों को भूलना होगा और बस मुझे पता है कि मुझे क्या जाना चाहिए, जो एक पथ खोज एल्गोरिदम है।
+1 "इस बकवास को कुचलने और दिमाग की स्थिति" के साथ मॉर्फिंग-ओवर-टाइम आवश्यकताओं के साथ +1 के लिए +1। – Alex