システムwiki

私が35の異なる数字を持っていて、私は "x"に等しい数の組み合わせを見つける必要があるならば、これを解決することについてどう思いますか?

Account 受付中 最終更新日:2021-05-14 09:56

私は35ドルの金額(異なる請求書)を持っていて、私は金額の組み合わせが "x"であるかを理解する式が必要です.

請求書のどちらの組み合わせが「X」になるかを見つけようとしています.

どんな助けにも感謝されます!

P.S.ちなみに、ある程度の請求書は二重請求金額であるかもしれません.

返信リスト(回答:19)

1 #
TusharM


Tushar Mehta(テクノロジーおよび運用コンサルティング)
13 #
Herbert 5

Excel2007/2010の表
HarlanGroveの優れたマクロ.
すべてのソリューションを表示します.
ペニーに正確です.
35の実行時間:1分(Excel 2010、windows 7)
https://c0718892.cdn.cloudfiles.rackspacecloud.com/03_08_10.xlsm

応答13# ->にスキップ
11 #
Account
ハーバート、ソリューション、ワークシートp2を調べる際に、ソリューションは請求書の金額に含まれていない数値を使用しています.例:最初のソリューションは、95.90、94.11、&68.96の値を示していますが、請求額は次のとおりです.
最大)
11.36
14.43
16.43
16.89
18.9
19.88
21.23
22.69
23.99
24.52
24.93
28.23
36.69
40.36
43.69
44.35
46.07
48.92
52.16
52.75
54.03
60.89
64.07
64.4
64.54
67.93
69.14
77.3
80.49
83.73
86.21
86.92
88.55
90.05
95.13

わかりません.確かにそれらはあなたが探している金額と同じですが、その金額は可能な請求書の金額には存在しません.元の請求書のリストにある金額が含まれているとしたら、それは素晴らしいことです.

これは私が扱っているデータです:

$ 342.57
$ 350.67
$ 350.67
$ 404.93
$ 404.93
$ 404.93
$ 603.34
$ 641.69
$ 656.52
$ 701.34
$ 708.66
$ 735.85
$ 809.85
$ 974.27
$ 974.27
$ 977.77
$ 1,402.67
$ 1,402.67
$ 1,461.40
$ 1,793.79
$ 2,104.01
$ 2,435.67
$ 2,575.46
$ 2,746.70
$ 2,805.35
$ 3,239.40
$ 3,644.33
$ 4,783.44
$ 4,783.44
$ 4,852.86
$ 4,859.11
$ 4,859.11
$ 4,909.36
$ 8,503.44
$ 12,273.40
$ 21,595.40

これは45,341.02ドルの支払い額です.36の請求額を並べ替えて、合計が支払額と等しい組み合わせ(1つの組み合わせのみ)を選択するマクロが必要です.

これまでに返信してくれたすべての人に感謝します.残念ながら、私はBerndのマクロに従うほど「鋭い」わけではありません-彼の例の使い方を理解できないようです.誰かがどこに行くのかについて少し説明してくれるなら、私は確かに感謝しています!

応答11# ->にスキップ
4 #
Herbert

Harlan Groveの方法:
リストをコピーしてtableに貼り付け、[マクロ]ボタンを押します.
70個のソリューションを取得しました.
合計で45,341.02ドルになります.
いずれかを選択してください.
70分の1の確率で、支払人が念頭に置いていた一連の請求書と一致します.
https://c0718892.cdn.cloudfiles.rackspacecloud.com/03_08_10.xlsm

応答4# ->にスキップ
2 #
Account

こんにちはHerbert、このマクロ(列3)に数字の数字を差し込むだけで、SSUM額を変更できますか?または、請求書の数に制限がありますか?また、それはどのくらいの期間完了しましたか?

私がそれを働かうとしていたとき、請求書&金額の列で生成された乱数はループのために私を投げていました.私のマイクロマクロ能力に関するあなたの時間と労力に感謝します!

あなたの友達、

マイク

応答2# ->にスキップ
3 #
Herbert

マイク:
プログラムを書いていないので、予測できません.
その性能や制限について


35乱数<$ 100に1分かかりました、
あなたの番号は私のPCで2時間かかりました.

応答11# ->にスキップ
10 #
joeu200

Berndが指摘した解決策(Berndによって翻訳されたMichael Schwimmerのマクロ)が、これまでに提案された最良の解決策であると私は信じています.

しかし、私も何をすべきか理解するのに問題がありました.Berndが自分のWebページを「ここからダウンロード」と言うように変更することをお勧めします.また、サンプルデータのないファイルまたはワークシートを提供するので、ユーザーは何が必要で何が必要でないかを理解する必要はありません.
彼自身の目的のために交換されます.

私の問題は、Excel 2003を使用しているという事実によって悪化しました.ご指摘のとおり、Excel 2007を使用すると、より簡単になります.

Berndの応答のリンクをクリックします.そのウェブページで、「彼のversionを英語に翻訳しました」で始まる段落を見つけて、「ここ」という単語で示されたリンクをクリックします.ファイルをダウンロードするか、Excelで開きます.

Excelファイルで、A2:A55を削除します.A2から始まる列Aに値を貼り付け、目標合計($ 45,341.02)をB2に入力します.おそらく、あなたは単に計算をクリックすることができます.(マクロcmbCalculate_Clickを手動で実行する必要がありました.)ソリューションは
D2から始まる列Dに配置されます.

Schwimmer's Macroは、私の古いラップトップで約41秒で解決策を見つけました.見つかった:

342.57
350.67
350.67
404.93
404.93
404.93
603.34
641.69
656.52
701.34
708.66
735.85
974.27
1402.67
1461.40
3644.33
4783.44
4783.44
4852.86
4589.11
12273.40

応答10# ->にスキップ
9 #
BerndPl

こんにちは、

問題は、サンプルファイルをダウンロードした場合

https://www.sulprobil.com/software/accounts_receivable_problem.xlsm.

[注意:あなた自身の責任でダウンロードして開く!]

IE8を使用すると、ファイル拡張子.XLSMに戻る必要があるファイル拡張子.

応答9# ->にスキップ
8 #
BerndPl

こんにちは

簡単にするために、マイクが求めていた入力を正確に含むファイルを次に示します.

https://dl.dropbox.com/u/6077606/Accounts_Receivable_Problem.xls

[開いて自己責任で使用してください!]

応答8# ->にスキップ
6 #
Account

omg-それはどれほどクールです! BerndとJoeu2004ありがとう!私は個人的にあなたにあなたに感謝していますこれは私が助けに恵まれてきた2回目です
いくつかの素晴らしい人たち.

もう一度-ありがとう人!

鑑賞会計士私.

p.S.-、IBMカードパンチ読み&ffffffffffffffffffffffffffffpppt後にすることが「メインフレーム」にカードの階下の私の「山」を取った--私が今まで撮影したコースだけでコンピュータが戻って1979年にエンジニアのためのFORTRANたOPSの一つは、私はがすう生じる
プリンター.その後、私は決してコンピュータを持っていないつもりです!それから2002年に、私は故障して購入しました.私は今大好きですが、私はVBAと難しい時間があります-古すぎる?あまりにも「DUBM」?わからないが、私は寛大な本当に賢い人々がいることを知っている
彼らの知識を共有するのに十分な、そして誠意をこめてあなたは大人ありがとう!

マイク

応答6# ->にスキップ
7 #
joeu200

他のUCバークレー卒業生?

その種のターンラウンタ時間を取得するには、2 amで働いていました:-)

応答7# ->にスキップ
5 #
Account

All Gator--UF--BSME 1980私は4年間の学校を5年間に詰め込むために本当に一生懸命働きました....:-)そして今あなたが午前2時に言及したので、それは思い出を呼び戻します!

>

もう一度、ありがとうございました.

18 #
joeu200 2

これは解決するのが非常に難しい問題です.ソリューションでは、最大2 ^ 35の組み合わせ(米国では340億と呼ばれる約34E + 9)を検討する必要があるかもしれません.

ソルバーを使用してこれを行うことができます.次のように設定するか、同等のものを設定します.

金額をA1:A35に入れます.B1:B35が空であることを確認してください.目標の合計をC1に入れます.次の式をC2に入れます:= SUMPRODUCT(A1:A35、B1:B35).次の式をC3に入れます:= ABS(C1-C2).

注:開始する前に、SUM(A1:A35)がC1を超えていることを確認するのが賢明です.そうでない場合は、A1:A35のすべてが最善の解決策です.やめて.

次に、ソルバーを設定します.私はExcel2007に精通していません.Excel2003で、[ツール]>[ソルバー]をクリックします.(Excel 2003では、ソルバーをインストールしてアドインとして選択する必要があります.)ターゲットセルをC3に設定します.Equal To:Minを選択します.B1:B35を[変更による]フィールドに入力します.追加
制約B1:B35=binary.いくつかのオプション、つまり最大時間と反復を変更することも賢明かもしれません.[解決]をクリックして、夕食に出かけます.

真剣に、ランダムな量と任意のターゲットを使用して、ソルバーは私の古代のラップトップで18秒未満で解決策を見つけました.YMMV.

解決策が見つかったら、列Bで1を探すことで、どの値が選択されたかを判断できます.より自動化されたものが必要な場合は、それを提供できます.

警告:ソルバーは__a__ソリューションを検出しますが、__all__ソリューションは検出しません.__all__ソリューションを見つけるには、2 ^ 35のすべての組み合わせを実行する必要があります.さらに、制約「min」(最小差)は「すべてのソリューション」の概念を複雑にします.

応答18# ->にスキップ
15 #
joeu200

警告エンプター!代わりに、C2で次の式を使用することが重要です.

= SUMPRODUCT(A1:A35、-(B1:B35<>0))

B1:B35がBIN(ary)であるという制約を指定しましたが、これは0または1を意味するはずです[1]が、1として表示される値が正確に1ではない場合があることを発見しました.

私のランダムな例では、B1:B35のほとんどは正確に0または1で構成されていますが、2つのセルでは、値は約0.999999577977886と0.999999873178923(!)です.

これにより、目標の合計とSUMPRODUCTの結果に大きな違いが生じました-約4.3E-5 [2].

上記のようにSUMPRODUCTを修正した後の違いは、約-3.6E-14です.これは、もしあれば、私が期待するような微小な違いです.


-
巻末注

[1]確かに、BIN(ary)が0または1であることを説明するドキュメントは見つかりません.おそらく、「ゼロ」と「非ゼロ」はバイナリ(二分法)です.

[2]元のSUMPRODUCT式を小数点以下2桁に丸めることで問題を改善できた可能性があります.これは、ドルとセントの結果に意味があります.ただし、(a)B1:B35のゼロ以外の「バイナリ」値の多くが正確に1でなかった場合、
SUMPRODUCTは小数点以下2桁までずれている可能性があります.(b)状況によっては、ソルバーでROUNDを使用するときに問題が発生したことがあります.ROUNDはおそらくこのコンテキストで機能しますが、#aを指定してテストする価値はありません.

応答15# ->にスキップ
14 #
joeu200

Aarrgghh!その__is__は、SUMPRODUCTが正しい結果を返すために必要です.しかし、その変更により、ソルバーは機能しなくなりました(!).

解決策を見つけるのに時間をかける代わりに、非常に悪い解決策をすばやく見つけます.「非常に悪い」とは、次のことを意味します.私の例では、新しいSUMPRODUCTでは、SUMPRODUCTが約520.36で、ターゲットの合計が1000になると、ソルバーが停止します.古いSUMPRODUCT、ソルバーで
SUMPRODUCTが約999.96になると停止します.

応答14# ->にスキップ
12 #
joeu200

絶え間ない投稿と誤った方向性について申し訳ありません.しかし、私は空気をきれいにする義務があると感じています.これらのフォローアップ投稿の一部を単純に削除したくはありません.まず、それらを読んだ人は、私がそれらを削除しても気付かない可能性があるためです.
以前のコメントのいくつかは誤った方向性である可能性がありますが、このタイプの問題に対するソルバーの使用についての洞察を提供していると思います.

最終的な分析では、SUMPRODUCT(A1:A35、B1:B35)がソルバーで使用する正しい式です.ただし、解決策が見つかったら、SUMPRODUCT(A1:A35、-(B1:B35<>0))または方法を使用して、ソルバーが見つけた最良の合計を計算します.

おそらく、不正確な「バイナリ」1は、ソルバーが実行するバイナリ浮動小数点計算の丸め誤差が原因です.知りません.ため息をつく、40年前のダンジグのLPクラスでもっと注意を払うべきだった.しかし、暴動が起こっていました
時間;-).

いずれにせよ、解に収束するために使用される式をあまり混乱させない限り、おそらくこの方法は確かに有効です.ソルバーの目的のために、可能な限り「ファジー論理」(不正確な式)に依存します.後で数式を調整します
解決策が見つかりました.

最後のコメント....

このソルバーアプローチでは、最適なソリューションが見つからない場合があります.ランダムデータとターゲット合計1000の私の例では、ソルバーはデフォルトオプションを使用して合計が999.96になる組み合わせを見つけました.オプションを次のように変更すると、正確な組み合わせが見つかります:max Iterations
(32767)、微小な精度と収束、および許容誤差の0.01%.

応答18# ->にスキップ
17 #
Account

あなたの迅速な返事をありがとう!私はソルバーの制約を設定することについて質問があります.2007年には、箱が3つの情報箱で開きます.1つ目は、B1:B35に設定されているセル参照で、2番目は<=、=、>=、int、bin、3番目のものです.
制約2番目のビンを試してみました、そしてそれは次のように戻ってきます.制約は数値の数値、単純な参照または数値でなければなりません.

私は「DUBM」を鳴らしているのが嫌いですが、私は真ん中のような=や最後のものの中で別の選択をしているか、または最後に何かを置くべきですか?最後に=とバイナリを試してみました、そして私は同じエラーメッセージを取得します.

私はあなたがそれを述べるまでソルバーについてさえ知っていない-確かにありがとう.

マイク

応答17# ->にスキップ
16 #
joeu200

私は助けることができたらいいのに、私は多くのユーザーの間違いを試みました、そして私はそのエラーメッセージを再現できません.

あなたがそれを説明するように正しく聞こえたこと.私はあなたの説明があなたがしたことを正確に一致しないと思うでしょう-おそらくソルバーを使用するときにいくつかの能力があると思います.

それが価値があるものについては、私は
の例のファイルをアップロードしました. リンク:ソルバーの例

そのURLに移動するときは、[無料ユーザー]をクリックしてからダウンロードします.おそらくその例を見ることによって、あなたはあなたの間違いを見つけることができるかもしれません.

(他の読者への注意:10のダウンロードの制限があります.それで、それでは、マイクがファイルをダウンロードしたことを示すまで、自分でリンクを使用しないでください.)

19 #
BerndPl 2

こんにちは

この問題はかなり頻繁に対処されてきました.

1つ(すべてではない)の解決策を提供するアプローチ:

https://www.sulprobil.com/html/accounts_receivable_problem.html

[すべてのソリューションには時間がかかる場合があります...]