SlideShare a Scribd company logo
1 of 12
Download to read offline
CodeIQ 最適解を目指せ!!
ナンプレ盤面問題 解法
Copyright © Fixstars Corporation. All rights reserved.
2013年9月19日(木)
二木紀行 (foota)
自己紹介
二木紀行
 Twitter: @foota
 ブログ「良いもの。悪いもの。」
 http://handasse.blogspot.com/
現職・フィックスターズ
 ビッグデータ・機械学習アルゴリズム
 並列処理・高速化・メニーコア
 GPGPU, Xeon Phi, Tileraなど
前職・理化学研究所
 薬学 / 創薬の研究
 分子動力学(MD)・分子軌道法(MO)
 MD専用機MDGRAPE-3・スーパーコンピュータ「京」
競技プログラミング
 TopCoderやICFPCなどに参加
解法
zero-fillの解のスコア
vertical : 246000 / 246000
horizontal: 246000 / 246000
3*3 block : 137780 / 248004
total : 629780 / 740004
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
3 1 2 6 4 5 9 7 8
6 4 5 9 7 8 3 1 2
9 7 8 3 1 2 6 4 5
2 3 1 5 6 4 8 9 7
5 6 4 8 9 7 2 3 1
8 9 7 2 3 1 5 6 4
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
...................................
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
0000000000000000...0000000000000000
1234567891234567...8912345678912345
4567891234567891...2345678912345678
7891234567891234...5678912345678912
3126459783126459...7831264597831264
6459783126459783...1264597831264597
9783126459783126...4597831264597831
2315648972315648...9723156489723156
5648972315648972...3156489723156489
...................................
2315648972315648...9723156489723156
5648972315648972...3156489723156489
8972315648972315...6489723156489723
1234567891234567...8912345678912345
4567891234567891...2345678912345678
7891234567891234...5678912345678912
3126459783126459...7831264597831264
6459783126459783...1264597831264597
zero-fillの解にtestcaseを入れたスコア
vertical : 59241 / 246000 -186759
horizontal: 58922 / 246000 -187078
3*3 block : 33459 / 248004 -104321
total : 151622 / 740004 -478158
0909000050000000...0000000000000000
0006000000000000...0800000000000000
0000000000200000...0000691100070004
0054260200300300...0000000000000000
0006000045000038...9110800500060030
0100700090000000...0000000900470000
0010000000000070...0397000000000000
6000000006000000...0000000000000000
...................................
0000600000400000...0600000007500400
0010074000000000...7000004009000200
0006002000000800...0050300000001000
0000000308010000...0000000030000280
0000000000004060...0000500000000000
0000200000040000...0100000010200000
0006060000800000...0007030000009000
0050000000080000...0000000250002000
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
3 1 2 6 4 5 9 7 8
6 4 5 9 7 8 3 1 2
9 7 8 3 1 2 6 4 5
2 3 1 5 6 4 8 9 7
5 6 4 8 9 7 2 3 1
8 9 7 2 3 1 5 6 4
1939567851234567...8912345678912345
4566891234567891...2845678912345678
7891234567291234...5678691145678914
3154269283326359...7831264597831264
6456783145459738...9114897531264537
9183726499783126...4597831964477831
2315648972315678...9397156489723156
6648972316648972...3156489723156489
...................................
2315648972415648...9623156487523456
5618974315648972...7156484729156289
8976312648972815...6459323156481723
1234567398214567...8912345638912285
4567891234564861...2345578912345678
7891234567841234...5178912315278912
3126469783826459...7837234597839264
6459783126489783...1264597251262597
焼き鈍したスコア
vertical : 95740 / 246000 +36499
horizontal: 96472 / 246000 +37550
3*3 block : 31604 / 248004 -1855
total : 223816 / 740004 +72194
1939567851234567...8912345678912345
4566891234567891...2845678912345678
7891234567291234...5678691145678914
3154269283326359...7831264597831264
6456783145459738...9114897531264537
9183726499783126...4597831964477831
2315648972315678...9397156489723156
6648972316648972...3156489723156489
...................................
2315648972415648...9623156487523456
5618974315648972...7156484729156289
8976312648972815...6459323156481723
1234567398214567...8912345638912285
4567891234564861...2345578912345678
7891234567841234...5178912315278912
3126469783826459...7837234597839264
6459783126489783...1264597251262597
2949816753294861...1792354681792354
4876123594867213...4825796134285796
7231589467231589...2678691145673644
1954267219389327...3854127693854127
5876231945815438...9119834572169834
3126745893126745...6463569969476569
8915374628953176...8397245618397217
6748952316748952...7531986427531986
...................................
2382656837492156...1626843197526413
4618374295684371...7235794859617236
1756592614375892...9854312768951342
8219465378219465...4712685934176285
5834716592834769...2369578412369574
9547238169547238...8178496311298698
3436965743812965...5947231685749231
6958147326985147...6893471256832457
全てのマスでナンプレ化のチェック
0 : 000000000
1 : 000000001
2 : 000000010
3 : 000000100
4 : 000001000
5 : 000010000
6 : 000100000
7 : 001000000
8 : 010000000
9 : 100000000
数字をビットで表現すれば、論理和だけでナンプレ化
のチェックができる。
ナンプレ化のチェックの際、数字がバラバラであるほ
どスコアを高くする。
ナンプレ化していればさらにスコアを上乗せする。

焼き鈍し法
高速化を考える

TBBによる並列化
500×500を逐次計算させずに、10×10分割をして100並
列で計算させる。
 実際に同時に計算できるのはスレッド数分まで
 スレッドセーフでないけど気にしない (・ε・)
 実行マシンはCore i7 (4コア8HT)
 1回の計算時間は数時間ぐらい
 数回ほど繰り返して計算を行ったので約1日
 もし並列化していなかったら1週間はかかっていたかも
Xeon Phiでも実装してみた。
 Xeon PhiはIntelのメニーコアCPUで60コア240HT!
 これは期待できる!
 しかし、Core i7よりも遅かった… orz
 Xeon Phiは整数演算処理が弱いのとパフォーマンスが上がる
ほど分割数を多くできなかった
並列化に関わるソースコード抜粋
class CalcCells {
private:
const double t;
const vector<unsigned int>& cells0;
vector<unsigned int>& cells;
double probability(double e0, double e, double t) const {
return e0 > e ? exp((1.0 - e0 / e) / t) : 1.0;
}
unsigned int get_cell(int x, int y, double t) const {
/* (変数省略) */
vector<unsigned int> bits_list;
// 処理するマスをbits_listに入れる.
/* (処理省略) */
for (unsigned int n = 1; n & 0x01ff; n <<= 1) {
int cnt = 0;
for (vector<unsigned int>::iterator p = bits_list.begin(); p != bits_list.end(); ++p) {
int ct = bitcount[*p | n];
cnt += ct;
if (ct == 9) cnt += W;
}
if (probability(prev_cnt, cnt, t) > static_cast<double>(xor128()) / MY_RAND_MAX) {
best_n = n;
prev_cnt = cnt;
if (cnt > max_cnt) max_cnt = cnt;
}
}
return best_n;
}
public:
CalcCells(const double t_, const vector<unsigned int>& cells0_, vector<unsigned int>& cells_)
: t(t_), cells0(cells0_), cells(cells_) { }
void operator()(const blocked_range2d<int, int>& r) const {
for (int y = r.rows().begin(); y != r.rows().end(); y++)
for (int x = r.cols().begin(); x != r.cols().end(); x++)
if (cells0[y*N+x] == 0) cells[y*N+x] = get_cell(x, y, t);
}
};
parallel_for(blocked_range2d<int, int>(0, N, NDIV, 0, N, NDIV), CalcCells(n * ALPHA, cells0, cells));
まとめ
焼き鈍し、凄い
 マラソン系のプログラミングコンテストでは定番
並列化、楽しい
 一般のプログラミングコンテストでは並列化ができない
ことが多いので使えると嬉しい

More Related Content

Similar to Code iq interpretation_futatsugi

How the future prediction affects on the evolution of technologies
How the future prediction affects on the evolution of technologiesHow the future prediction affects on the evolution of technologies
How the future prediction affects on the evolution of technologies坂本 真里
 
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊Kazuhiro Fujieda
 
第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ
第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ
第6回 社内プログラミングコンテスト 結果発表会 量子リバーシFixstars Corporation
 
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021Toshiyuki Shimono
 
Scis2017 2007-01-27-02
Scis2017 2007-01-27-02Scis2017 2007-01-27-02
Scis2017 2007-01-27-02Ruo Ando
 
トーナメントは運か実力か
トーナメントは運か実力かトーナメントは運か実力か
トーナメントは運か実力かKazuro Fukuhara
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...Toru Tamaki
 

Similar to Code iq interpretation_futatsugi (8)

How the future prediction affects on the evolution of technologies
How the future prediction affects on the evolution of technologiesHow the future prediction affects on the evolution of technologies
How the future prediction affects on the evolution of technologies
 
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
ftp.jaist.ac.jpの低レイヤーの話 on 第九回 カーネル/VM探検隊
 
第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ
第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ
第6回 社内プログラミングコンテスト 結果発表会 量子リバーシ
 
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021
 
mBaaS x IoT
mBaaS x IoTmBaaS x IoT
mBaaS x IoT
 
Scis2017 2007-01-27-02
Scis2017 2007-01-27-02Scis2017 2007-01-27-02
Scis2017 2007-01-27-02
 
トーナメントは運か実力か
トーナメントは運か実力かトーナメントは運か実力か
トーナメントは運か実力か
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
 

More from Fixstars Corporation

製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptxFixstars Corporation
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編Fixstars Corporation
 
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~Fixstars Corporation
 
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~Fixstars Corporation
 
株式会社フィックスターズの会社説明資料(抜粋)
株式会社フィックスターズの会社説明資料(抜粋)株式会社フィックスターズの会社説明資料(抜粋)
株式会社フィックスターズの会社説明資料(抜粋)Fixstars Corporation
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編Fixstars Corporation
 
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fixstars Corporation
 
Jetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けてJetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けてFixstars Corporation
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~Fixstars Corporation
 
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化Fixstars Corporation
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方Fixstars Corporation
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてFixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
第8回 社内プログラミングコンテスト 結果発表会
第8回社内プログラミングコンテスト 結果発表会第8回社内プログラミングコンテスト 結果発表会
第8回 社内プログラミングコンテスト 結果発表会Fixstars Corporation
 
第8回 社内プログラミングコンテスト 第1位 taiyo
第8回社内プログラミングコンテスト 第1位 taiyo第8回社内プログラミングコンテスト 第1位 taiyo
第8回 社内プログラミングコンテスト 第1位 taiyoFixstars Corporation
 

More from Fixstars Corporation (20)

製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
 
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
 
株式会社フィックスターズの会社説明資料(抜粋)
株式会社フィックスターズの会社説明資料(抜粋)株式会社フィックスターズの会社説明資料(抜粋)
株式会社フィックスターズの会社説明資料(抜粋)
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)
 
Jetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けてJetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けて
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
 
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
第8回 社内プログラミングコンテスト 結果発表会
第8回社内プログラミングコンテスト 結果発表会第8回社内プログラミングコンテスト 結果発表会
第8回 社内プログラミングコンテスト 結果発表会
 
第8回 社内プログラミングコンテスト 第1位 taiyo
第8回社内プログラミングコンテスト 第1位 taiyo第8回社内プログラミングコンテスト 第1位 taiyo
第8回 社内プログラミングコンテスト 第1位 taiyo
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (9)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

Code iq interpretation_futatsugi

  • 1. CodeIQ 最適解を目指せ!! ナンプレ盤面問題 解法 Copyright © Fixstars Corporation. All rights reserved. 2013年9月19日(木) 二木紀行 (foota)
  • 2. 自己紹介 二木紀行  Twitter: @foota  ブログ「良いもの。悪いもの。」  http://handasse.blogspot.com/ 現職・フィックスターズ  ビッグデータ・機械学習アルゴリズム  並列処理・高速化・メニーコア  GPGPU, Xeon Phi, Tileraなど 前職・理化学研究所  薬学 / 創薬の研究  分子動力学(MD)・分子軌道法(MO)  MD専用機MDGRAPE-3・スーパーコンピュータ「京」 競技プログラミング  TopCoderやICFPCなどに参加
  • 4. zero-fillの解のスコア vertical : 246000 / 246000 horizontal: 246000 / 246000 3*3 block : 137780 / 248004 total : 629780 / 740004 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 1 2 3 7 8 9 1 2 3 4 5 6 3 1 2 6 4 5 9 7 8 6 4 5 9 7 8 3 1 2 9 7 8 3 1 2 6 4 5 2 3 1 5 6 4 8 9 7 5 6 4 8 9 7 2 3 1 8 9 7 2 3 1 5 6 4 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 ................................... 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 0000000000000000...0000000000000000 1234567891234567...8912345678912345 4567891234567891...2345678912345678 7891234567891234...5678912345678912 3126459783126459...7831264597831264 6459783126459783...1264597831264597 9783126459783126...4597831264597831 2315648972315648...9723156489723156 5648972315648972...3156489723156489 ................................... 2315648972315648...9723156489723156 5648972315648972...3156489723156489 8972315648972315...6489723156489723 1234567891234567...8912345678912345 4567891234567891...2345678912345678 7891234567891234...5678912345678912 3126459783126459...7831264597831264 6459783126459783...1264597831264597
  • 5. zero-fillの解にtestcaseを入れたスコア vertical : 59241 / 246000 -186759 horizontal: 58922 / 246000 -187078 3*3 block : 33459 / 248004 -104321 total : 151622 / 740004 -478158 0909000050000000...0000000000000000 0006000000000000...0800000000000000 0000000000200000...0000691100070004 0054260200300300...0000000000000000 0006000045000038...9110800500060030 0100700090000000...0000000900470000 0010000000000070...0397000000000000 6000000006000000...0000000000000000 ................................... 0000600000400000...0600000007500400 0010074000000000...7000004009000200 0006002000000800...0050300000001000 0000000308010000...0000000030000280 0000000000004060...0000500000000000 0000200000040000...0100000010200000 0006060000800000...0007030000009000 0050000000080000...0000000250002000 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 1 2 3 7 8 9 1 2 3 4 5 6 3 1 2 6 4 5 9 7 8 6 4 5 9 7 8 3 1 2 9 7 8 3 1 2 6 4 5 2 3 1 5 6 4 8 9 7 5 6 4 8 9 7 2 3 1 8 9 7 2 3 1 5 6 4 1939567851234567...8912345678912345 4566891234567891...2845678912345678 7891234567291234...5678691145678914 3154269283326359...7831264597831264 6456783145459738...9114897531264537 9183726499783126...4597831964477831 2315648972315678...9397156489723156 6648972316648972...3156489723156489 ................................... 2315648972415648...9623156487523456 5618974315648972...7156484729156289 8976312648972815...6459323156481723 1234567398214567...8912345638912285 4567891234564861...2345578912345678 7891234567841234...5178912315278912 3126469783826459...7837234597839264 6459783126489783...1264597251262597
  • 6. 焼き鈍したスコア vertical : 95740 / 246000 +36499 horizontal: 96472 / 246000 +37550 3*3 block : 31604 / 248004 -1855 total : 223816 / 740004 +72194 1939567851234567...8912345678912345 4566891234567891...2845678912345678 7891234567291234...5678691145678914 3154269283326359...7831264597831264 6456783145459738...9114897531264537 9183726499783126...4597831964477831 2315648972315678...9397156489723156 6648972316648972...3156489723156489 ................................... 2315648972415648...9623156487523456 5618974315648972...7156484729156289 8976312648972815...6459323156481723 1234567398214567...8912345638912285 4567891234564861...2345578912345678 7891234567841234...5178912315278912 3126469783826459...7837234597839264 6459783126489783...1264597251262597 2949816753294861...1792354681792354 4876123594867213...4825796134285796 7231589467231589...2678691145673644 1954267219389327...3854127693854127 5876231945815438...9119834572169834 3126745893126745...6463569969476569 8915374628953176...8397245618397217 6748952316748952...7531986427531986 ................................... 2382656837492156...1626843197526413 4618374295684371...7235794859617236 1756592614375892...9854312768951342 8219465378219465...4712685934176285 5834716592834769...2369578412369574 9547238169547238...8178496311298698 3436965743812965...5947231685749231 6958147326985147...6893471256832457
  • 7. 全てのマスでナンプレ化のチェック 0 : 000000000 1 : 000000001 2 : 000000010 3 : 000000100 4 : 000001000 5 : 000010000 6 : 000100000 7 : 001000000 8 : 010000000 9 : 100000000 数字をビットで表現すれば、論理和だけでナンプレ化 のチェックができる。 ナンプレ化のチェックの際、数字がバラバラであるほ どスコアを高くする。 ナンプレ化していればさらにスコアを上乗せする。
  • 10. TBBによる並列化 500×500を逐次計算させずに、10×10分割をして100並 列で計算させる。  実際に同時に計算できるのはスレッド数分まで  スレッドセーフでないけど気にしない (・ε・)  実行マシンはCore i7 (4コア8HT)  1回の計算時間は数時間ぐらい  数回ほど繰り返して計算を行ったので約1日  もし並列化していなかったら1週間はかかっていたかも Xeon Phiでも実装してみた。  Xeon PhiはIntelのメニーコアCPUで60コア240HT!  これは期待できる!  しかし、Core i7よりも遅かった… orz  Xeon Phiは整数演算処理が弱いのとパフォーマンスが上がる ほど分割数を多くできなかった
  • 11. 並列化に関わるソースコード抜粋 class CalcCells { private: const double t; const vector<unsigned int>& cells0; vector<unsigned int>& cells; double probability(double e0, double e, double t) const { return e0 > e ? exp((1.0 - e0 / e) / t) : 1.0; } unsigned int get_cell(int x, int y, double t) const { /* (変数省略) */ vector<unsigned int> bits_list; // 処理するマスをbits_listに入れる. /* (処理省略) */ for (unsigned int n = 1; n & 0x01ff; n <<= 1) { int cnt = 0; for (vector<unsigned int>::iterator p = bits_list.begin(); p != bits_list.end(); ++p) { int ct = bitcount[*p | n]; cnt += ct; if (ct == 9) cnt += W; } if (probability(prev_cnt, cnt, t) > static_cast<double>(xor128()) / MY_RAND_MAX) { best_n = n; prev_cnt = cnt; if (cnt > max_cnt) max_cnt = cnt; } } return best_n; } public: CalcCells(const double t_, const vector<unsigned int>& cells0_, vector<unsigned int>& cells_) : t(t_), cells0(cells0_), cells(cells_) { } void operator()(const blocked_range2d<int, int>& r) const { for (int y = r.rows().begin(); y != r.rows().end(); y++) for (int x = r.cols().begin(); x != r.cols().end(); x++) if (cells0[y*N+x] == 0) cells[y*N+x] = get_cell(x, y, t); } }; parallel_for(blocked_range2d<int, int>(0, N, NDIV, 0, N, NDIV), CalcCells(n * ALPHA, cells0, cells));