音楽歴35年・FLAKE RECORDSの店主DAWAの選ぶセンス光る注目曲ご紹介!

pythonで最適化問題について学んでいます。
1から7の7つの数字からから5つの数字をを取り出すプログラムを書こうと思っているのですが、このときにその取り出す5つの組み合わせがなるべく強い組み合わせ(大きな数字)になるようにプログラムしたいのです。できればシミュレーテッドアニーリングのアルゴリズムを使ってプログラムしたいのですが、どうもよく分かりません。
pythonでなくC++でもjavaでもいいので、良い方法、書き方などあったら教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

質問者さんが欲しい答えが今ひとつわかりにくいです。



・アニーリング自体がよくわからない
・評価関数をどうすればいいかわからない
・プログラムの全体の流れがわからない
・プログラミングそのものがよくわからない

などなど色々考えられるのですが、疑問点は何でしょうか?
補足して頂ければ回答があつまりやすくなると思います。


ちなみにアニーリングのアルゴリズムを簡単に言いますと、
局所的最適解に落ち着かないようにすることでなるべく
広い範囲を探索できるようにし、より最適解に近づこう
とする方法です。
少しぐらい前回より評価が悪くてもそいつを採用してみよう!
というわけですね。どれぐらいまでなら悪くなっても
採用するかの基準が、温度によって変わります。

この回答への補足

丁寧な返信をありがとうございます。
評価関数をどうすればいいのか分からないのです。
AIMAでのサンプルコードがあるのですがhttp://aima.cs.berkeley.edu/python/search.html#b …
それを参考にして7つの数字の中から5つの最適解を出していくための評価関数の書き方を教えていただきたいのです。

補足日時:2005/11/06 11:54
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q業務系WEBアプリを開発するにはどんな言語が適しているのか

MicrosoftVisualWebDeveloper2005を勉強して3ヶ月のものです。
業務系WEBアプリを開発するにあたってどんな言語が適しているのか
皆さんの意見を聞きたいのでアドバイス下さい。

Javaがいいのか、PHPがいいのかそれぞれの長所、短所がまだ
わかってないのでご教授下さい。
よろしくお願いします。

Aベストアンサー

業務系と言う言葉で何を表したいのか不明なので、一般論ですが、
PHPは絶対駄目です。セキュアなプログラムを書くのが非常に難しい。

現時点ではJavaがメジャーで、プログラマも多いです。ただ開発工数・その後の維持管理工数が機能に比べて膨大です。
そういう意味では、Railsのような新しいフレームワークが優れています。
JavaでもRailsの長所の一部を取り込んだSeaser2などがいいかもしれません。

Q初心者がPythonを学ぶのに最適なサイト

プログラミング言語のPythonを学びたいのですが、いくつか質問させてください。
一年くらい前にPythonのことを知り、その時は適当にネット上のサイトを読みあさっただけで、結局Pythonを本格的に学ぶことはなかったのですが…。
一年前のことなので至らない知識や記憶違いがあると思います。

1、Pythonを学ぶのに最適なサイトを教えてください。
自分はまったくの初心者で他のプログラミング言語の素養はありません。

2、Pythonの根本的な使い方について。
とりあえずPythonをインストールしたみたのですが、Pythonを使う上で、
プログラムの構築はコマンドプロンプトでPythonを呼び出して行う
のと、
そうではなくPython.exeをクリックしてそのアプリケーション上で行う
どっちが正しいのでしょうか?

3、2011年7月現在、バージョンはいくつがいいんでしょうか?
一昔前はバージョン2.XXから3.XXに変わるときの仕様変更が大規模だったため乗り換えを躊躇するような風潮があったような気がするんですが(間違っていたら申し訳ありません)。
↑を抜きにしても今からPythonを始める場合は最新バージョンを使用したほうがいいですか?

以上です。
よろしくお願いします。

プログラミング言語のPythonを学びたいのですが、いくつか質問させてください。
一年くらい前にPythonのことを知り、その時は適当にネット上のサイトを読みあさっただけで、結局Pythonを本格的に学ぶことはなかったのですが…。
一年前のことなので至らない知識や記憶違いがあると思います。

1、Pythonを学ぶのに最適なサイトを教えてください。
自分はまったくの初心者で他のプログラミング言語の素養はありません。

2、Pythonの根本的な使い方について。
とりあえずPythonをインストールしたみたのですが、Py...続きを読む

Aベストアンサー

1. おっさんにも解るPython
http://op-py.blogspot.com/2010/09/blog-post.html

2. どっちでもいいです。

3. 2.6系列か2.7系列にしておけば間違いないでしょう。
3.xの問題は、言語の問題と言うより、使えるライブラリがまだ揃ってないから、です。Pythonの魅力の半分以上は、言語自体の設計がどーの、と言うより、平たく言うと外部ライブラリが豊富である、です。3.xはまだそれが足りないのが人々が移行を避ける大きな原因です。

Qフリーソフトはどんなプログラム言語で書かれているのでしょうか?

長文ですが最後まで目を通していただきますようお願い申し上げます。

vectorなどにはたくさんのフリーソフトがありますがいったいあのフリーソフト達はどんな言語で書かれているのでしょうか。

色々なプログラム言語で書かれているのは分かっています。ですので具体的にプログラム言語名を知っている方は知っているだけ書いていただければ幸いです。

今フリーソフトで一番使われているプログラム言語は何なんですか?

最後に私もフリーソフトを作って見たいと考えていますが、3年ぐらい勉強したら出来るでしょうか?
出来ればVBみたいにVBランタイムが必要なプログラム言語では書きたくないのですが・・・。

今私が作って見たいと考えているのは
1.選択式問題
2.システムの状態を表示させる
などのソフトを作ってみたいのですが。
時間がかかるのは覚悟のうえです。
勉強もします。

ですので 1.2 のようなソフトを作りたいと思うとどのようなプログラムで書くといいでしょうか?
アドバイスよろしくお願いします。
またそのプログラムを完成させるためのソフトも教えていただければありがたいです。
ソフトは出来れば無料がありがたいですが、本気でやりたいので有料でも出来るなら教えてください。


皆様のご回答心よりお待ちしております。
よろしくお願いします。

長文ですが最後まで目を通していただきますようお願い申し上げます。

vectorなどにはたくさんのフリーソフトがありますがいったいあのフリーソフト達はどんな言語で書かれているのでしょうか。

色々なプログラム言語で書かれているのは分かっています。ですので具体的にプログラム言語名を知っている方は知っているだけ書いていただければ幸いです。

今フリーソフトで一番使われているプログラム言語は何なんですか?

最後に私もフリーソフトを作って見たいと考えていますが、3年ぐらい勉強したら出...続きを読む

Aベストアンサー

一番多いのはC++でしょうね。
僕のお勧めするのは、MicrosoftのVisual C# 2005 Express Editionです。うれしいことに1年間限定で無料ダウンロードできます。限定っていってもダウンロード期間が限定であってダウンロードさえしておけばずーっと使えます。

Visual Studio 2005 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/

Visual Studio 2005は、.NET Frameworkというランタイム上で動作するソフトになります。言語はC#、C++、Basic、J#のいずれかを選択します。言い換えればどの言語を選んでも.NET Framework上で動きます。(詳しくはCLR:Common Language Runtimeを調べてみてください)お勧めはC#です。2000年だっけ?にできたばかりの新しい言語です。JAVAのいいところと踏襲しています。もし、ランタイムに依存しないソフトを作るなら、Visual C++ 2005 Express EditionでWin32アプリを作ることになります。でも、.NET Frameworkは結構普及してきているし、Windows Updateでインストール可能なのであまりランタイムのことは気にしなくてもいいでしょう。

個人的な意見なので無視して結構ですが、Basicはあまりお勧めしません。C/C++か、C#がお勧めです。Basicの利点といえばExcelなどのマクロでVBAというVBに似た言語が利用できる点だけでしょうか。覚えておくにはいいでしょう。

JAVAについては#2さんと同意見です。優れた言語であることは確かですが投稿者の用途では他のがよいかと。

C++、C#、VBなどは、Microsoftが積極的にわかりやすい解説もあります。

「300 秒でズバリ !!」&「10 行でズバリ !!」シリーズ [Visual Studio 2005 対応版]
http://www.microsoft.com/japan/msdn/thisweek/300x10/

あっそれと、C++、VB、C#のいずれかを選択した場合、Windowsアプリばかりか、動的サイト(アンケートサイトや会員用サイトなどなど)も作ることができます。作成したプログラムの一部をクラスライブラリにすることでWindowsアプリとWebアプリの両方で共有できます。プログラムがかなり効率的になります。Microsoft関係者じゃないですけど^_^;絶対にお勧めです。

一番多いのはC++でしょうね。
僕のお勧めするのは、MicrosoftのVisual C# 2005 Express Editionです。うれしいことに1年間限定で無料ダウンロードできます。限定っていってもダウンロード期間が限定であってダウンロードさえしておけばずーっと使えます。

Visual Studio 2005 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/

Visual Studio 2005は、.NET Frameworkというランタイム上で動作するソフトになります。言語はC#、C++、Basic、J#のいずれかを選択します。言い換えればど...続きを読む

Qpython超初心者です(3時間目)。pythonで以下のようなランダ

python超初心者です(3時間目)。pythonで以下のようなランダム数列を生成させるにはどうしたらいいのでしょうか?

最終結果のイメージ(16進数8桁の数列x20行):
0 : c39a29eb
1 : b26cc9bb
2 : 4c494e47
...
19: 93c85836


以下のようにコードを組んでみたのですが、
> tmp = ws.join(list)
> TypeError: sequence item 0: expected string, int found
のようなエラーが出てしまいます。どうやら数字を連結しようとしてるのでダメなのかな?と思っています。

========================================
#! /usr/bin/python

import random
list = []
ws = ""

for i in range (20):
print i, ":",
for j in range(8):
list.append(random.randint(0,15))
tmp = ws.join(list)
print tmp
list = []
tmp = ""
========================================
※ printでは必ずスペースが入ってしまうので、それを嫌う場合配列に入れて、要素を連結させなくてはならない、とwebにあったので、その方向で試してみました。
※ また、ここではあくまでrandom を使用し、一文字(0,1,2,...E,F)づつ出力させたいと思っています。


なお、perlでは以下のように書くことができたのですが...
========================================
#! /usr/bin/perl

for($i=0; $i<20; $i++){
printf ("%-02s: ", $i);
for($j=0; $j<8; $j++){
printf("%x", int(rand(15)) );
}
print "\n";
}
========================================

※ んー第二言語としてpythonを学習してみていますが道のり険しそうです(やっぱrubyにしようか)...

宜しくお願い致します。

python超初心者です(3時間目)。pythonで以下のようなランダム数列を生成させるにはどうしたらいいのでしょうか?

最終結果のイメージ(16進数8桁の数列x20行):
0 : c39a29eb
1 : b26cc9bb
2 : 4c494e47
...
19: 93c85836


以下のようにコードを組んでみたのですが、
> tmp = ws.join(list)
> TypeError: sequence item 0: expected string, int found
のようなエラーが出てしまいます。どうやら数字を連結しようとしてるのでダメなのかな?と思っています。

========================================
#! /...続きを読む

Aベストアンサー

Pythonはインデントが重要なのですが、ここでは消されてしまいます。
全角スペースとか適当な文字を使って代用するようにしてください。

さて。
数値は文字列ではありません。
joinは文字列を連結するものですが、数値を自動で文字列化するようなことはしません。
Pythonでは、型付けは結構厳しいです。

ところで、そのPerlの中で %xを使って数値を文字列に変換していますよね。
Pythonでも同じように文字列化すればよいのです。
フォーマット文字列 % 単独の値、またはシーケンス
が,Perlの sprintf(フォーマット文字列, 値...) と同等ですので
list.append( "%X" % random.randint(0,15))
とすれば、listのは16進の文字列で格納されるので、joinで連結できます

#! /usr/bin/python
import random
# forの範囲などで使うなら、リストを作るrangeより、イテレータを作るxrangeの方が効率的
for i in xrange (20):
 list = []
 for j in xrange(8):
  list.append('%x' % random.randint(0,15))
# 後に使わないのなら、直接書いてもよいでしょう。
# 文字列リテラルも「オブジェクト」なので、下のjoinのような書き方もできます。
 print '%02d:%s' % (i, ''.join(list))

ちなみに、2.6以降ではprintの仕様変更がありましたので、そのPerlのスクリプトをPythonではこう書けます。

#! /usr/bin/python
from __future__ import print_function #2.6で3仕様のprintを使用するのに必要。3では不要
import random

for i in xrange(20):
# もとは"%-02s"だけど、これは文字列と数値の違いのないPerlだからできること
 print( "%02d:" % i , end='' )
 for j in xrange(8):
  print( "%x" % random.randint(0,15) , end='')
# endの指定がなければ改行付き。表示文字列指定がなければ改行だけ
 print( )

Pythonはインデントが重要なのですが、ここでは消されてしまいます。
全角スペースとか適当な文字を使って代用するようにしてください。

さて。
数値は文字列ではありません。
joinは文字列を連結するものですが、数値を自動で文字列化するようなことはしません。
Pythonでは、型付けは結構厳しいです。

ところで、そのPerlの中で %xを使って数値を文字列に変換していますよね。
Pythonでも同じように文字列化すればよいのです。
フォーマット文字列 % 単独の値、またはシーケンス
が,Perlの sprintf(フォーマッ...続きを読む

Q宇都宮で言語リハビリを受けられる病院

今月末に宇都宮に転居します。母が脳梗塞による言語障害があるので、現在言語を中心にリハビリを行っています。
宇都宮市内及び近辺で言語療法士によるリハビリを受けられる病院をご存知の方教えてください。もし複数あればお勧めの所を教えていただけるとありがたいです。
初めての土地で病院情報も良くわからないので、よろしくお願いいたします。

Aベストアンサー

栃木県の言語聴覚士会のサイトを探してみたのですが見当たらないので、
日本言語聴覚士協会のURLを貼っておきます。
こちらに尋ねてみられてはいかがでしょうか?

なおご存知かと思いますが、今年度から、
リハビリを継続するためにいろいろな制限がつきました。
言語聴覚士がいるからと言って、
必ずしもリハビリが受けられるとは限らないのでご注意ください。

参考URL:http://www.jaslht.gr.jp/index.html

Qpythonを学びたいのですが

pythonを学びたいのですが調べているとバージョン2と3で大きな違いがあるようで・・・・。いろいろ解説サイトや学習サイトをのぞくとバージョン2系で書き方の説明がされているのですがやはりこれからのことを考えるとバージョン3で学んでいったほうがよいのでしょうか?また、pythonはほかの言語に組み込んだりして使うことが多いという風に聞いたのですがその辺は2も3もかわりませんよね?
ご教授お願いいたします

Aベストアンサー

>pythonを学びたいのですが調べているとバージョン2と3で大きな違いがあるようで・・・・。

確かに結構違いがありますが、こればかりは経験で把握していくしか無いですね。

個人的には日本語の扱いが楽なので出来れば3を使いたいのですが、未だに2を使ってるプログラムも沢山あります。歴史的事情だけでなく、ライブラリの関係などで新規開発も2でせざるを得ない場合もあります。

>いろいろ解説サイトや学習サイトをのぞくとバージョン2系で書き方の説明がされているのですが

ネット上の情報は2と3が混在し、どちらかと言えば2の方が多く見られる印象があるのは事実ですね。
#特に厄介なのは2、3のどちらか明示されていないページが多々あることです。

ただ、2と3の違いをまとめたサイトは沢山あるので、基本的な部分については、それを見ておけば問題ありません。
ライブラリについては、色々変わっている部分もありますので、原則、公式リファレンス(http://www.python.org/doc/)を参照するのが良いと思います。
#3系は邦訳がまだされていません。


>やはりこれからのことを考えるとバージョン3で学んでいったほうがよいのでしょうか?

2と3のどちらで勉強すべきか、というのは微妙な問題ですが、個人的には3がオススメです。
というのも、2と3の変更によって、互換はなくなっていますが、言語としてより自然な方向へ進んでいるためです。
#内部のunicode化とかinputとか

http://nakagami.blog.so-net.ne.jp/2011-12-06


>また、pythonはほかの言語に組み込んだりして使うことが多いという風に聞いたのですがその辺は2も3もかわりませんよね?

あまり組み込んで使ったことがないので詳しくは分からないのですが、2でも3でもC・C++には組み込めるはずです。
#やり方が全く同じかどうかは分かりません。

http://docs.python.org/py3k/extending/embedding.html

>pythonを学びたいのですが調べているとバージョン2と3で大きな違いがあるようで・・・・。

確かに結構違いがありますが、こればかりは経験で把握していくしか無いですね。

個人的には日本語の扱いが楽なので出来れば3を使いたいのですが、未だに2を使ってるプログラムも沢山あります。歴史的事情だけでなく、ライブラリの関係などで新規開発も2でせざるを得ない場合もあります。

>いろいろ解説サイトや学習サイトをのぞくとバージョン2系で書き方の説明がされているのですが

ネット上の情報は2と3が混在し...続きを読む

Qアセンブリ言語を学ぶことは意味がありますでしょうか。

アセンブリ言語を学ぶことは意味がありますでしょうか。

プログラミングの上達や理解を深めるためにアセンブリ言語を学ぶ意味はありますでしょうか。
C++を学ぶとプログラミングの上達や理解は確かに深まりましたが、アセンブリ言語はどうでしょうか。

アセンブリ言語でポインタの意味が分かったと言う人もいますし・・・。

また、アセンブリ言語で役立つことがあれば何でも教えてください。

Aベストアンサー

意味はあると思いますよ。
アセンブリ言語ではポインタ(アドレス)を扱うことは必須ですから、確実にポインタへの理解は深まります。
また、1つ1つの命令を突き詰めていくと、コンピュータ(CPU)がどのようにして動いているかわかるようになります。
最終的にはメモリダンプ(16進数の羅列)でプログラムが追えるようになれます。

C++を知っているのでしたら、1度、プログラムを混合モードで表示してみてください。
C言語の1行1行の命令が、アセンブリ言語でどのように展開されているかを見ることができます。


ただ…
質問者さんがどれくらいのレベルの方かわかりませんが、僕はプログラミングの上達は単にたくさんの言語を知っていることとは決してイコールではないと思っています。
人がコンピュータで行いたいこと(自然言語で表現したソフトウェアの仕様)を、論理的思考を経て、プログラミング言語に置き換えていく「翻訳作業」がプログラミングだと思ってます。

論理的思考さえできれば、未経験の言語でも(最初のうちはマニュアルとにらめっこになりますが)プログラムは作れます。
逆に論理的思考ができなければ、できあがったプログラムは、読みづらい・異様に処理時間がかかる・ちょっとした例外ですぐにエラー停止する…など「できの悪いプログラム」になります。

もし、C++を学んであまり時間が経ってないのでしたら、もっと深くC++を勉強して、まずは論理的思考ができるようになってください。
別の言語に手を出すのはそれからで遅くありません。

意味はあると思いますよ。
アセンブリ言語ではポインタ(アドレス)を扱うことは必須ですから、確実にポインタへの理解は深まります。
また、1つ1つの命令を突き詰めていくと、コンピュータ(CPU)がどのようにして動いているかわかるようになります。
最終的にはメモリダンプ(16進数の羅列)でプログラムが追えるようになれます。

C++を知っているのでしたら、1度、プログラムを混合モードで表示してみてください。
C言語の1行1行の命令が、アセンブリ言語でどのように展開されているかを見ることができ...続きを読む

QPython2系と3系、最初に学ぶならどっち?

Python2系と3系、最初に学ぶならどちらがいいでしょうか?

入門サイトや書籍が多かったり、Djangoが対応している2系にするべきか、最新の3系にするべきか迷っています。
皆さんの意見をお聞かせください。

Aベストアンサー

どちらか一方しか学ばないということを考えているのでない限り、
3系→2系
でしょう。

Q多言語対応の電子辞書について

 日本製で、多言語対応の電子辞書を探しています。
追加のコンテンツカードなり、そのほかの方法で多言語に出来るのもありです。

■収録希望の言語
・英語(米・英の違いについてのっているとなお良い)
・イタリア
・フランス
・ドイツ
・ロシア
・スペイン
(カスティリヤ・カタランの違いについてのっているとなお良い)
・中国語(北京語のみで可)
・アラビア語
(エジプトで通じればOK、方言についてのっているとなおよい)
・どの言語も、日本語訳があるとよい。
(最悪英語訳をした上で、英和にジャンプなどで調べられれば良い)
・音声機能搭載


■できればあると嬉しいもの
・どの言語も、料理の名前などが収録されているとよい。
・タイ語
・ヘブライ語
・ラテン語
・一部でよいので、手書き検索
・1台で無理なら、2台で済ませたい。


 収録希望の言語だけでも、ロシア・アラビアあたりの収録機器を探すと、とたんに無くなってしまいます。
 どこかで10ヶ国語対応のも見たのですが、辞書の精度が悪いとの評価があり、言葉の意味を調べるには向いていないようでした。

 いろんな言語をちょっとつづ調べるため、通常の辞書を買うには大きすぎたり、何言語もそのようなものをもつのも・・と思っています。2,3言語なら辞書でもいいんですけども。
 オンライン辞書もなかなか見つからないので、殆どWEB翻訳の類で、意味を調べるのには向いていないようでした。

 もし知っている方がいましたら、教えていただければと思います。
使用感もあわせて聞いてみたいです。

 日本製で、多言語対応の電子辞書を探しています。
追加のコンテンツカードなり、そのほかの方法で多言語に出来るのもありです。

■収録希望の言語
・英語(米・英の違いについてのっているとなお良い)
・イタリア
・フランス
・ドイツ
・ロシア
・スペイン
(カスティリヤ・カタランの違いについてのっているとなお良い)
・中国語(北京語のみで可)
・アラビア語
(エジプトで通じればOK、方言についてのっているとなおよい)
・どの言語も、日本語訳があるとよい。
(最悪英語訳をした上で、英和にジ...続きを読む

Aベストアンサー

選ぶときのヒントだけ申し上げます。
1.追加言語の追加方法:コンピュータ経由で電子辞書内部に流し込む方法であれば使いやすいと思います。A言語から、B言語に切り替えるたびにカードを抜き差しするのは困ります。(古いタイプで今はないかも知れませんが)
1.1.私はカシオのEX-Word を使っています。英語韓国語が元で、独、仏、西を追加してあります。伊は上記古いタイプの物しかなく、カードの差し替えを余儀なくされています。(電子辞書そのものは新型ですが、イタリア語の追加は古い方のカードしかないのです。組み合わせて使うことは出来ます。)
2.キーの上の刻字:元の言語を例えば英語ドイツ語で選ぶと、韓国文字/ハングル文字がキーボード上にないので、韓国語に切り替えたとき入力に苦労します。ですから、英語韓国語を元にして、ドイツ語を追加したのです。
2.1.言い換えますと、キーボードからの入力方法を前もって検討しておくべきです。中国語の入力方法を私は知りませんが、ご存じですか。ロシア文字や、アラビア文字は表音文字ですから、原理的には同じ方法で、入力出来ますね。しかしキーの上に刻字がなければ困りますね。

選ぶときのヒントだけ申し上げます。
1.追加言語の追加方法:コンピュータ経由で電子辞書内部に流し込む方法であれば使いやすいと思います。A言語から、B言語に切り替えるたびにカードを抜き差しするのは困ります。(古いタイプで今はないかも知れませんが)
1.1.私はカシオのEX-Word を使っています。英語韓国語が元で、独、仏、西を追加してあります。伊は上記古いタイプの物しかなく、カードの差し替えを余儀なくされています。(電子辞書そのものは新型ですが、イタリア語の追加は古い方のカードし...続きを読む

Qpythonの初心者です!コマンドプロンプトでモジュールのロード python-izm 関数:tes

pythonの初心者です!コマンドプロンプトでモジュールのロード
python-izm
関数:testを呼び出しました
と表示したいのですが、
モジュールのロード
Traceback (most recent call last):
File "test02.py", line8, in <module>
if _name_ == ,"_main_":
NameError: name '_name_' is not defined
となってしまいどうしたらいいのか分からないのです。写真のどこが間違ってるか分からないのでだれか教えてください(´Д` )

Aベストアンサー

if _name_ == "_main_":

じゃなくって

if __name__ == "__main__"

じゃないんですかね?
(本とかじゃ分かりづらいですが、アンダーバーは_一つじゃなくって2つ__使います)


人気Q&Aランキング