3

ビデオでパターン認識を行うソフトウェアを開発しています。アルゴリズムを作成している7人の数学者がいます。さらに、これらのアルゴリズムを使用してアプリケーションを保守/開発する2人の開発者がいます。問題は、数学者がさまざまな開発ツールを使用して、Matlab、C、C++などのアルゴリズムを作成していることです。また、開発者ではないため、メモリ管理やマルチスレッドについてはあまり気にしません。これがアプリの理由の1つです。たくさんのバグがあります。

あなたの会社で同じような状況にある場合、どのように対処しますか?アルゴリズムを作成するために推奨できる最高のツールは何ですか?数学者と開発者の間にはどのようなコミュニケーションがあると思われますか?高レベルのツールを使用するのに最も効果的なものは何だと思いますか?

4

5 に答える 5

4

あなたの開発者が数学者のものを書き直しているのか、それとも単にそれにインターフェースする必要があるのか​​わからないので、私の答えが役に立ったかどうかはわかりません。

ただし、私は機械学習ライブラリで多数の博士課程の候補者やポスドクと協力しており、私自身も学生です。その過程で、私は多くのアルゴリズムをpython/numpyからC++/blasに変換するようになりました。

このプロセスは非常に面倒な場合があります。特に数値的および確率的アルゴリズムでは、バグを見つけるのは困難です。

これが私がしたことです:いくつかのサンプル入力を取得し、Pythonコードで結果を計算します。これらからC++の単体テストを生成してから、C++でのコーディングを開始します。

この設定では、具体的なサンプル入力と出力を確認することが不可欠です。

于 2009-06-01T20:46:08.180 に答える
3

マカチに同意します。

アルゴリズムを作成している人に、彼らが最もよく知っているツールを使用させます。このプロジェクトで取り組むべき2つの別々の(そして等しく重要な)タスクがあるからです。最初に、効率的でエレガントで適切な数学的に適切なアルゴリズムを作成し、次にそれをCPUスピークに変換するというねじれた困難なタスクがあります。数学者は最初の仕事に集中し、彼らがそれを簡単にするために、彼らが快適なトゥースルを使用できるようにする必要があります。工数に関しては、MATLABコードを書くのに、新しいプログラミング言語を学ばせるよりもはるかに効率的に時間を使うことができます。

あなたの仕事は、ぎこちないコードの中に埋もれている(おそらく)素晴らしい数学を発掘することです。

その部分は、目前の問題についての単なる見方です。これが実際の答えです。

コミュニケーション、相互尊重、教育/学習。

コミュニケーションと相互尊重

あなたは彼らと頻繁にコミュニケーションをとらなければなりません。彼らと緊密に協力し、確信が持てない何かに出くわしたときはいつでも彼らに質問してください。相互に敬意を払うと、これははるかに簡単になります。つまり、コーディング能力を批判することにすべての時間を費やすと、数学能力を批判することにすべての時間を費やすことになります。代わりに、クイックラーニングセッションを試してください。(「ランチ&ラーン」はかなり一般的な戦術です)

教育/学習

彼らに伝える最初で最も重要な知恵はコメントです。彼らに彼らのコードのがらくたをコメントしてもらいます。コメントはコードの品質よりもはるかに重要であり、コメントが正しい限り、残りは皆さんに任せることができることを伝えます。彼らができるからです。彼らはコードを美しく見せる必要はありません。最速であるために、彼らはあなたたちに意味をなすためにそれを必要とするだけです。

この相互学習シナリオを継続するために、彼らが犯している非常に単純で非常に一般的な間違いに気付いた場合(マルチスレッドほど複雑なものはありません)、すぐに頭を上げてください。「その方法は機能します(または機能しません)が、少し異なる方法がありますが、それはあなたの生活をはるかに楽にします。」あなたとあなたのチームが苦労しているアルゴリズムのニュアンスや部分に気づき、それについて少しチュートリアルを教えることによって、彼らに往復するように促します。

コミュニケーションがスムーズに行われると、チームに最適なコーディングスタイルを簡単に作成できるようになります。また、同じように表示されない理由を理解しやすくなります。 。

また、Kekoavが述べたように、完全にロードされたテストケースがいくつか提供されていることを確認してください。つまり、

A-> B->C->D->ソリューション

それらは、Aのすべての値、次にBでの外観、Cでの外観などを提供します。これにより、最後に正しいだけでなく、すべての段階で正しいことを確認できます。コードがエッジケースをカバーしていることを確認できるように、定期的な例と珍しい例をいくつか提供してもらうようにしてください。

于 2009-06-01T22:47:53.957 に答える
2

開発者は、Matlab、特にMatlabデバッガーに慣れるのに数時間を費やすことをお勧めします。彼らのバックグラウンドがCSである場合、実際にはそうではないにしても、理論的にはベクトルと行列にすでに精通しているでしょう。マトリックスがデフォルトのデータ構造であることを除けば、MatlabはCに似ており、別の言語に翻訳するために解釈するのに十分簡単です。

于 2009-06-01T20:13:32.503 に答える
2

私は最近物理学の教授と仕事をしていて、これについて少し経験があります(確かに私は専門家ではありませんが)。

多くのMatlabコードを別の言語に翻訳する必要がありました。精度や行列やベクトルの操作など、多くの(ほとんどの)演算がないため、困難でした。優れた数学ライブラリを見つけるか、ニーズに合わせて作成する必要があります。

私が見つけた最善の方法は、次のことを行うことです。

  1. 新しい言語で正しく機能するアルゴリズムを入手してください。
  2. いくつかのテストを作成して、アルゴリズムが目的の出力を生成していることを確認します。数学者に、変換されたソリューションが実際に機能すること、およびすべてのベースをテストでカバーしたことを確認してもらいます。
  3. 次に、それが機能し、テストを信頼し、アルゴリズムを最適化して優れたコーディングスタイルにし、優れた設計とパフォーマンスの特性を持たせることができます。回帰テストを使用して、何かを壊していないことを確認します。

私は通常、アルゴリズムを他の言語に逐語的にコピーしてから、多くのテストを行うかどうかに関係なく、そこから作業を行います。

パフォーマンスが実際には問題ではなく、他のことに移る必要があり、後で戻って高速化できる場合に備えて、最初に作業用コピーを入手することが重要です。

于 2009-06-01T20:20:39.667 に答える
0

これがあなたの仕事です。これにどのように対処するかが、システム開発者としてのあなたを識別します。

同僚とコミュニケーションを取ります。描画して説明し、会議を開き、標準要件に同意して設定し、計画に従い、プロジェクトマネージャーに相談します。関連する同僚が会議に参加していることを確認してください。1-1の話などがあります

バグを作成している開発者の数学者のせいにすることはできません。数学者ではなく、実装について心配するのは彼らの仕事です。

于 2009-06-01T20:20:46.857 に答える