Вопросы с тегами [optimization]

1

голосов
2

ответ
71

Просмотры

Best practice: how to pass many many arguments to a function?

Я бегу некоторые численные эксперименты, в которых моя главная функция должна получать много и много аргументов - я говорю от 10 до 30 аргументов в зависимости от моделирования для запуска. Каковы лучшие практики для обработки случаев, как это? Разделив код в, скажем, 10 функций, с 3-мя аргументами каждый не звучит очень возможно в моем случае. Если это не лучший форум для этого типа вопросов, вы можете порекомендовать где спросить? Что я могу сделать, это создать экземпляр класса (без методов), хранить входные данные в качестве атрибутов этого экземпляра, а затем передать экземпляр - так что функция принимает только один вход. Мне это нравится, потому что код выглядит чистым, легко читать, и потому что я считаю, что легко определить и запустить альтернативные сценарии. Мне не нравится, потому что доступ к классу атрибутов в функции происходит медленнее, чем доступ к локальной переменной (см: Как / почему для оптимизации кода путем копирования атрибутов класса для локальных переменных), а потому, что это не эффективное использование памяти - слишком много данных, хранящихся несколько раз без необходимости. Любые мысли / предложения / рекомендации? Большое спасибо! myinput = MyInput () myinput.input_sql_table = that_sql_table myinput.input_file = that_input_file myinput.param1 = param1 myinput.param2 = param2 myoutput = известково (myinput) Альтернативные сценарии: входы = collections.OrderedDict () сценариев = collections.OrderedDict () входы [ 'Базовый сценарий'] = copy.deepcopy (myinput) входы [ 'param2 = 100'] = copy.deepcopy (myinput) входы [ 'param2 = 100']. param2 = 100 # цикл через все входы и выходы магазинах в упорядоченный словарь сценарии
1

голосов
2

ответ
398

Просмотры

Более эффективный, чтобы проверить, является ли переменная установлена, а затем установить его, или просто постоянно установить его?

Создание игры ... Более эффективно делать это? если 37 (keysDown) {// стрелка влево, если (sprite.state = 'левый'!) sprite.state = 'левый'; } или это? если (37) в keysDown {// стрелка влево sprite.state = 'левый'; } Это вызывается функция обновления моей игры (постоянно, как можно быстрее). Sidenote: вот мой входной код ключа проверки. // вход вар keysDown = {}; window.addEventListener ( 'KeyDown', функция (е) {keysDown [e.keyCode] = TRUE;}); window.addEventListener ( 'KeyUp', функция (е) {удалить keysDown [e.keyCode];});
Sam
1

голосов
1

ответ
1.3k

Просмотры

Оптимальная длина функции Python (Style) [закрыт]

Возможно, это не правильное место, чтобы задать этот вопрос, и часть меня думает, что нет никакого реального ответа на него, но мне интересно посмотреть, что опытные пользователи Python должны сказать по этой теме: Для обеспечения максимальной читаемости, краткости, и полезность, что диапазон для оптимальной длины функции Python? (При условии, что эта функция будет использоваться в сочетании с другими функциями, чтобы сделать что-то полезное.) Я понимаю, что это невероятно зависит от поставленной задачи, но как Второкурсник Comp. Sci. майор, один из наиболее последовательных указаний профессоров для написания программ, которые состоят из коротких функций так, чтобы разбить их на «простые», дискретные задачи. Я сделал большой рыть, в том числе через стиль руководства Python, но я не придумать хороший ответ. Если есть какой-либо опытный Python пользователи, которые хотели бы весить на эту тему, я был бы признателен за понимание. Благодарю.
austin_sherron
6

голосов
0

ответ
104

Просмотры

Как оптимизировать параллельную сортировку улучшить временную работу?

У меня есть алгоритм параллельной сортировки списка заданной длины: импорт Control.Parallel (пар, pseq) импорт Data.Time.Clock (diffUTCTime, GetCurrentTime) импорт System.Environment (getArgs) импорт System.Random (StdGen, getStdGen, Randoms) parSort :: (Ord а) => [а] -> [а] parSort (х: хз) = сила больше `par` (заставить меньшую` pseq` (менее ++ х: больше)), где меньшие = parSort [у | у [а] -> [а] сортировки (х: хз) = меньшее ++ х: больше, где меньше, = рода [у | у (сила) хз = хз идут `pseq` (), где идут (_: хз) = идти хз идти [] = 1 randomInts :: Int -> StdGen -> [Int] randomInts кг = позволяют Result = принять к (Randoms г) в результате силы `seq` результат функции теста = parSort основных = делать арг
Vasiliy
1

голосов
6

ответ
154

Просмотры

Relying on compiler optimizations with C++ [closed]

Question: is it OK to rely on compiler optimizations while coding? Let's say I need to calculate calculateF and calcuateG which both depend on another value returned by getValue. Sometimes I need both values, some other times I only need one of those values. // some function double getValue(double value) { double val(0.0); // do some math with value return val; } // calculateF depends on getValue double calculateF(double value) { double f(0.0); auto val = getValue(value); // calculate f which depends on val (and value) return f; } // calculateG depends on getValue double calculateG(double value) { double g(0.0); auto val = getValue(value); // calculate g which depends on val (and value) return g; } Now, I could write this more elegantly: std::pair calculateFG(double value) { auto val = getValue(value); double f(0.0), g(0.0); // calculate f and g which depend on val (and value) return {f,g}; } If I want both values: double value(5.3); auto [f,g] = calculateFG(value); // since C++17 // do things with f and g If I want only 1 value, say f, I just don't use g and it will be optimized out. So, the performance of calculateFG is exactly the same as calculateF if I don't use g. Furthermore, if I need both f and g, I only need to call getValue once instead of twice. The code is cleaner (only 1 function calculateFG instead of calculateF and calculateG), and faster if both f and g are required. But is relying on the compiler optimization a wise choice?
MFnx
1

голосов
3

ответ
45

Просмотры

MySQL- Improvement on count(*) aggregation with composite index keys

У меня есть таблица со следующей структурой с почти 120000 строк, по убыванию user_group_report + ------------------ + ---------- + ---- - + ----- + ------------------- + ------- + | поле | Тип | Null | Ключ | По умолчанию | Extra | + ------------------ + ---------- + ------ + ----- + ------ ------------- + ------- + | user_id | INT | ДА | MUL | NULL | | | group_id | INT (11) | ДА | MUL | NULL | | | type_id | INT (11) | ДА | | NULL | | | group_desc | VARCHAR (128) | НЕТ | | NULL | | статус | перечисление ( «открытый», «закрыть» ) | НЕТ | | NULL | | | LAST_UPDATED | Дата и время | НЕТ | | CURRENT_TIMESTAMP | | + ------------------ + ---------- + ------ + ----- + ------ ------------- + ------- + у меня есть индексы на следующие клавиши: user_group_type (user_id, group_id, group_type) group_type (group_id, type_id) user_type (user_id, type_id) user_group (user_id, group_id) Мой вопрос я бегу агрегацию COUNT (*) на приведенной выше таблице группы по group_id и с п о tYPE_ID Вот запрос: SELECT COUNT (*) user_count, group_id из user_group_report где type_id = 1 группа по group_id; а вот объяснить план (запрос с 0,3 сек в среднем): + ---- + ------------- + ------------------ + ------- + --- ------------------------------ + --------- + --------- + ------ + -------- + -------------------------- + | ID | SELECT_TYPE | стол | типа | possible_keys | ключ | key_len | ссылка | строки | Extra | + ---- + ------------- + ------------------ + ------- + --- ------------------------------ + --------- + --------- + ------ + -------- + -------------------------- + | 1 | SIMPLE | user_group_report | индекс | user_group_type, group_type, user_group | group_type | 10 | NULL | 119811 | Используя где; Использование индекса | + ---- + ------------- + ------------------ + ------- + --- ------------------------------ + --------- + --------- + ------ + -------- + -------------------------- + Здесь, как я понимаю, запрос почти выполняет полный просмотр таблицы из-за сложные индексы и когда я пытаюсь добавить индекс group_id, строки в объяснить план показывает меньшее число (почти половина строк), но время принятия для выполнения запроса увеличивается до 0,4-0,5 сек. Я пробовал разные способы добавления / удаления индексов, но ни один из них не является сокращение затраченного времени. Предполагая, что структура таблицы не может быть изменена, и выполнение запроса не зависит от других таблиц, может кто-то предложить мне лучший способ оптимизировать выше запрос или если я что-нибудь здесь отсутствует. PS: Я уже пытался изменить запрос к следующему, но не смог найти какие-либо улучшений. выберите COUNT (user_id) USER_COUNT, group_id от user_group_report, где type_id = 1 группа по group_id; Любая маленькая помощь ценится. Изменить: В соответствии с предложениями, я добавил новый индекс type_group на (TYPE_ID, group_id) Это новый объяснить план. Количество строк в объяснении, уменьшается, но время выполнения запроса все то же + ---- + ------------- + ------------- ----- + ------ + --- + --------------------------------- ------ + --------- + ------- + ------- + ----------------- --------- + | ID | SELECT_TYPE | стол | типа | possible_keys | ключ | key_len | ссылка | строки | Extra | + ---- + ------------- + ------------------ + ------ + ---- ----------------------------- + --------- + --------- + ------- + ------- + -------------------------- + | 1 | SIMPLE | user_group_report | ссылка | user_group_type, type_group, user_group | type_group | 5 | Const | 59846 | Используя где; Использование индекса | + ---- + ------------- + ------------------ + ------ + ---- ----------------------------- + --------- + --------- + ------- + ------- + -------------------------- + EDIT 2: Добавление деталей, как предложено в ответах / комментарии SELECT COUNT (*) из user_group_report где type_id = 1 сам по себе этот запрос принимает 0,25 секунд для выполнения. а вот объяснить план: + ---- + ------------- + ------------------ + ------ + ---- ----------- + --------- + --------- + ------- + ------- + - ----------- + | ID | SELECT_TYPE | стол | типа | possible_keys | ключ | key_len | ссылка | строки | Extra | + ---- + ------------- + ------------------ + ------ + ---- ----------- + --------- + --------- + ------- + ------- + - ----------- + | 1 | SIMPLE | user_group_report | ссылка | type_group | type_group | 5 | Const | 59866 | Использование индекса | + ---- + ------------- + ------------------ + ------ + ---- ----------- + --------- + --------- + ------- + ------- + - ----------- +
Coder 477
1

голосов
2

ответ
109

Просмотры

Improving MySQL SELECT query speed of four huge (~100M rows) JOINed tables

I have the following query that is supposed to find extra information for each related record by a given linker number. For example this query finds Title, Author, and Date for all the documents that linkTo a single one with linker=86sgv_ksg:0040608. SELECT `r`.`linker`, IF(`s`.`isSecond`='1', `c2`.`title`, `c1`.`title`) AS `Title`, IF(`s`.`isSecond`='1', `c2`.`author`, `c1`.`author`) AS `Author`, IF(`s`.`isSecond`='1', `c2`.`date`, `c1`.`date`) AS `Date` FROM (SELECT `linker` FROM `my_rel` WHERE `linkTo`='86sgv_ksg:0040608') `r` INNER JOIN `my_stat` `s` ON `r`.`linker`=`s`.`linker` LEFT JOIN `my_content_1` `c1` ON (`s`.`isSecond`='0' AND `s`.`linker`=`c1`.`linker`) LEFT JOIN `my_content_2` `c2` ON (`s`.`isSecond`='1' AND `s`.`linker`=`c2`.`linker`); This is the EXPLAIN results: id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY ALL NULL NULL NULL NULL 38702 NULL 1 PRIMARY s eq_ref Unique Unique 767 r.linker 1 NULL 1 PRIMARY c1 ref linker linker 767 r.linker 1 Using where 1 PRIMARY c2 ref linker linker 767 r.linker 1 Using where 2 DERIVED my_rel ref Link Link 767 const 38702 Using index condition This query, depending on how many records are found takes quite a few seconds (almost one second per 1000 rows found) # Query_time: 20.393228 Lock_time: 0.000115 Rows_sent: 19917 Rows_examined: 99672 with this server: CPU: Intel® Core™ i7-6700 RAM: 64 GB DDR4 Hard Drive: 2 x 500 GB SATA 6 Gb/s |_ SSD: Software-RAID 0 = 1000GB and my OS (Linux) and MySQL DB are on SSD. But still the query take few seconds. Table my_rel (~200M rows) holds all the relationships between documents and these documents are separated in two tables: my_content_1 (~5M rows) and my_content_2 (~65M rows) depending on their types. Table my_stat (~70M rows) identifies where each document is (in my_content_1 or my_content_2). The SHOW CREATE TABLE for these four tables are as follow: CREATE TABLE `my_content_1` /*similarly `my_content_2`*/ ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` text COLLATE utf8_general_ci NOT NULL, `author` tinytext COLLATE utf8_general_ci NOT NULL, `date` date NOT NULL, `linker` varchar(255) COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `linker` (`linker`) USING BTREE, KEY `date` (`date`) ) ENGINE=InnoDB AUTO_INCREMENT=67654117 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=COMPRESSED CREATE TABLE `my_rel` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `linker` varchar(255) COLLATE utf8_general_ci NOT NULL, `order` int(10) unsigned NOT NULL, `linkTo` varchar(255) COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `Unique` (`linker`, `order`) USING BTREE, KEY `Link` (`linkTo`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=248383246 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=COMPRESSED CREATE TABLE `my_stat` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `linker` varchar(255) COLLATE utf8_general_ci NOT NULL, `isSecond` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `Unique` (`linker`) USING BTREE, KEY `isSecond` (`isSecond`) ) ENGINE=InnoDB AUTO_INCREMENT=111412100 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=COMPRESSED Initially my query was like this: SELECT `r`.`linker`, IF(`s`.`isSecond`='1', `c2`.`title`, `c1`.`title`) AS `Title`, IF(`s`.`isSecond`='1', `c2`.`author`, `c1`.`author`) AS `Author`, IF(`s`.`isSecond`='1', `c2`.`date`, `c1`.`date`) AS `Date` FROM `my_rel` `r` LEFT JOIN `my_stat` `s` ON `r`.`linker`=`s`.`linker` LEFT JOIN `my_content_1` `c1` ON (`s`.`isSecond`='0' AND `s`.`linker`=`c1`.`linker`) LEFT JOIN `my_content_2` `c2` ON (`s`.`isSecond`='1' AND `s`.`linker`=`c2`.`linker`) WHERE `r`.`linkTo`='86sgv_ksg:0040608' AND `r`.`linker`!='86sgv_ksg:0040608' GROUP BY `r`.`linker` ORDER BY `Date` DESC; and it was taking a little bit longer than my current query by doing grouping and ordering, which I removed to have better speed. The current query still take long time to do all the linkings. Can my query be faster?
SAVAFA
1

голосов
1

ответ
54

Просмотры

Create a web worker when a function is called | JavaScript

I have a Tic Tac Toe 3D game which I want to optimize because at this moment, it crashes my web browser. It uses the MiniMax alpha-beta-pruning algorithm and I've split the code in 3 different files: TTT3D |-js   |---init.js # where I define all variables (as winningCombos, human, computer etc)   |---worker.js # the miniMax algorithm and at the end, I send as message the choice variable   |---ticAlpha.js # the worker is built and trying to get the response |-index.html Here is the code: index.html Tic Tac Toe 3D Hi there! Let's play Tic Tac Toe! Choose your player! X O X O Play Again init.js var winningCombos = new Array(); winningCombos[0] = [0, 1, 2]; winningCombos[1] = [3, 4, 5]; winningCombos[2] = [6, 7, 8]; // Per columns winningCombos[3] = [0, 3, 6]; winningCombos[4] = [1, 4, 7]; winningCombos[5] = [2, 5, 8]; // Diagonals winningCombos[6] = [0, 4, 8]; winningCombos[7] = [2, 4, 6]; // Second board //Per lines winningCombos[8] = [9, 10, 11]; winningCombos[9] = [12, 13, 14]; winningCombos[10] = [15, 16, 17]; // Per columns winningCombos[11] = [9, 12, 15]; winningCombos[12] = [10, 13, 16]; winningCombos[13] = [11, 14, 17]; // Diagonals winningCombos[14] = [9, 13, 17]; winningCombos[15] = [11, 13, 15]; // Third board // Per lines winningCombos[16] = [18, 19, 20]; winningCombos[17] = [21, 22, 23]; winningCombos[18] = [24, 25, 26]; // Per columns winningCombos[19] = [18, 21, 24]; winningCombos[20] = [19, 22, 25]; winningCombos[21] = [20, 23, 26]; // Diagonals winningCombos[22] = [18, 22, 26]; winningCombos[23] = [20, 22, 24]; // 3D Winning winningCombos[24] = [0, 13, 26]; winningCombos[25] = [20, 13, 6]; // Per lines winningCombos[26] = [0, 10, 20]; winningCombos[27] = [3, 13, 23]; winningCombos[28] = [6, 16, 26]; var free = ' '; var boardSize = 27; var board = new Array(); var activePlayer = 'Human'; var i; var choice; var human; var humanTurn; var computer; var computerTurn; var humanWin = 0; var computerWin = 0; $(document).ready(function() { $("button").click(function(){ $("#intro").addClass("hidden"); $("#board").removeClass("hidden"); }); }); function startGame(player) { for (i = 0; i < boardSize; i += 1) { board[i] = free; } activePlayer = 'Human'; if (player == "X") { human = "X"; humanTurn = "X"; computer = "O"; computerTurn = "O"; } else { human = "O"; humanTurn = "O"; computer = "X"; computerTurn = "X"; } } ticAlpha.js function makeMove(pos) { if (board[pos] === free && !gameOver(board)) { board[pos] = human; document.getElementById(pos).innerHTML = humanTurn; if (!gameOver(board)) { activePlayer = 'Computer'; makeComputerMove(); } } } function makeComputerMove() { // miniMax(board, 0, -Infinity, +Infinity); var worker = new Worker('worker.js'); worker.postMessage('its time'); worker.onmessage = function(event) { var move = event.data; }; board[move] = computer; document.getElementById(move).innerHTML = computerTurn; choice = []; activePlayer = 'Human'; } function score(possibleGame) { var score = getWinner(possibleGame); if (score === 3) { return 0; } else if (score === 1) { return -1; } else if (score === 2) { return 1; } } function miniMax(node, depth, alpha, beta) { if (getWinner(node) !== 0) { return score(node); } depth += 1; // var scores = new Array(); // var moves = new Array(); var availableMoves = getAvailableMoves(node); var move, result, possibleGame; if (activePlayer === 'Computer'){ for (var i = 0; i < availableMoves.length; i += 1) { move = availableMoves[i]; possibleGame = generateNewGame(move, node); result = miniMax(possibleGame, depth, alpha, beta); node = undoMove(node, move); if (result > alpha) { alpha = result; if (depth === 1) { choice = move; } else if (alpha >= beta) { return alpha; } } } return alpha; } else if (activePlayer === 'Human') { for (var i = 0; i < availableMoves.length; i += 1) { move = availableMoves[i]; possibleGame = generateNewGame(move, node); result = miniMax(possibleGame, depth, alpha, beta); node = undoMove(node, move); if (result < beta) { beta = result; if (depth === 1) { choice = move; } else if (alpha >= beta) { return beta; } } } return beta; } } function undoMove(possibleGame, move) { possibleGame[move] = free; changePlayerTurn(); return possibleGame; } function getAvailableMoves(tempBoard) { var availableMoves = new Array(); for (var i = 0; i < boardSize; i += 1) { if (board[i] === free) { availableMoves.push(i); } } return availableMoves; } function generateNewGame(move, possibleGame) { var piece = changePlayerTurn(); possibleGame[move] = piece; return possibleGame; } function changePlayerTurn() { var turn; if (activePlayer === 'Computer') { turn = computer; activePlayer = 'Human'; } else { turn = human; activePlayer = 'Computer'; } return turn; } function gameOver(tempBoard) { if (getWinner(tempBoard) === 0) { return 0; } else if (getWinner(tempBoard) === 1) { alert("You won!"); humanWin += 1; if (human === "X") { document.getElementById("xPlayerScore").value = humanWin; } else { document.getElementById("oPlayerScore").value = humanWin; } } else if (getWinner(tempBoard) === 2) { alert("Computer won!"); computerWin += 1; if (computer === "X") { document.getElementById("xPlayerScore").value = computerWin; } else { document.getElementById("oPlayerScore").value = computerWin; } } else if (getWinner(tempBoard) === 3) { alert("The game was a draw!"); } return 1; } function getWinner(tempBoard) { for (i = 0; i < winningCombos.length; i += 1) { if (tempBoard[winningCombos[i][0]] === human && tempBoard[winningCombos[i][1]] === human && tempBoard[winningCombos[i][2]] === human) { return 1; // human won } else if (tempBoard[winningCombos[i][0]] === computer && tempBoard[winningCombos[i][1]] === computer && tempBoard[winningCombos[i][2]] === computer) { return 2; // computer won } } if (tempBoard.indexOf(free) >= 0) { return 0; // not finished yet } return 3; // the game was a draw } function gameOver(tempBoard) { if (getWinner(tempBoard) === 0) { return 0; } else if (getWinner(tempBoard) === 1) { alert("You won!"); humanWin += 1; if (human === "X") { document.getElementById("xPlayerScore").value = humanWin; } else { document.getElementById("oPlayerScore").value = humanWin; } } else if (getWinner(tempBoard) === 2) { alert("Computer won!"); computerWin += 1; if (computer === "X") { document.getElementById("xPlayerScore").value = computerWin; } else { document.getElementById("oPlayerScore").value = computerWin; } } else if (getWinner(tempBoard) === 3) { alert("The game was a draw!"); } return 1; } function getWinner(tempBoard) { for (i = 0; i < winningCombos.length; i += 1) { if (tempBoard[winningCombos[i][0]] === human && tempBoard[winningCombos[i][1]] === human && tempBoard[winningCombos[i][2]] === human) { return 1; // human won } else if (tempBoard[winningCombos[i][0]] === computer && tempBoard[winningCombos[i][1]] === computer && tempBoard[winningCombos[i][2]] === computer) { return 2; // computer won } } if (tempBoard.indexOf(free) >= 0) { return 0; // not finished yet } return 3; // the game was a draw } function playAgain() { if (getWinner(board) != 0) { for (var j = 0; j < boardSize; j += 1) { document.getElementById(j).innerHTML = ""; } resetBoard(); } } function resetBoard() { for (i = 0; i < boardSize; i += 1) { board[i] = free; } } worker.js function miniMax(node, depth, alpha, beta) { if (getWinner(node) !== 0) { return score(node); } depth += 1; // var scores = new Array(); // var moves = new Array(); var availableMoves = getAvailableMoves(node); var move, result, possibleGame; if (activePlayer === 'Computer'){ for (var i = 0; i < availableMoves.length; i += 1) { move = availableMoves[i]; possibleGame = generateNewGame(move, node); result = miniMax(possibleGame, depth, alpha, beta); node = undoMove(node, move); if (result > alpha) { alpha = result; if (depth === 1) { choice = move; } else if (alpha >= beta) { return alpha; } } } return alpha; } else if (activePlayer === 'Human') { for (var i = 0; i < availableMoves.length; i += 1) { move = availableMoves[i]; possibleGame = generateNewGame(move, node); result = miniMax(possibleGame, depth, alpha, beta); node = undoMove(node, move); if (result < beta) { beta = result; if (depth === 1) { choice = move; } else if (alpha >= beta) { return beta; } } } return beta; } } function undoMove(possibleGame, move) { possibleGame[move] = free; changePlayerTurn(); return possibleGame; } function getAvailableMoves(tempBoard) { var availableMoves = new Array(); for (var i = 0; i < boardSize; i += 1) { if (board[i] === free) { availableMoves.push(i); } } return availableMoves; } function generateNewGame(move, possibleGame) { var piece = changePlayerTurn(); possibleGame[move] = piece; return possibleGame; } function changePlayerTurn() { var turn; if (activePlayer === 'Computer') { turn = computer; activePlayer = 'Human'; } else { turn = human; activePlayer = 'Computer'; } return turn; } function gameOver(tempBoard) { if (getWinner(tempBoard) === 0) { return 0; } else if (getWinner(tempBoard) === 1) { alert("You won!"); humanWin += 1; if (human === "X") { document.getElementById("xPlayerScore").value = humanWin; } else { document.getElementById("oPlayerScore").value = humanWin; } } else if (getWinner(tempBoard) === 2) { alert("Computer won!"); computerWin += 1; if (computer === "X") { document.getElementById("xPlayerScore").value = computerWin; } else { document.getElementById("oPlayerScore").value = computerWin; } } else if (getWinner(tempBoard) === 3) { alert("The game was a draw!"); } return 1; } function getWinner(tempBoard) { for (i = 0; i < winningCombos.length; i += 1) { if (tempBoard[winningCombos[i][0]] === human && tempBoard[winningCombos[i][1]] === human && tempBoard[winningCombos[i][2]] === human) { return 1; // human won } else if (tempBoard[winningCombos[i][0]] === computer && tempBoard[winningCombos[i][1]] === computer && tempBoard[winningCombos[i][2]] === computer) { return 2; // computer won } } if (tempBoard.indexOf(free) >= 0) { return 0; // not finished yet } return 3; // the game was a draw } onmessage = function(e) { miniMax(board, 0, -Infinity, Infinity); postMessage(choice); }; The problem is that the variable move is always undefined and even if I do a console.log() inside the worker.onmessage function, it doesn't display anything. It's more likely to misunderstood the concept of what a web worker is and should be used but I am trying for more than 24 hours to solve it and it feels like 0 progress. Would appreciate your help if possible. Thanks a lot!
Alex
1

голосов
3

ответ
587

Просмотры

Оптимизация алгоритма для определения сдавшего из заранее определенного диапазона

Проблема: У вас есть список (1-D массив) оценки (некоторые номера). У вас есть еще два списка: lowerLimits: список, содержащее значение нижнего предела (ов) upperLimits: список, содержащее значение верхнего предела (ов) Ваша задача состоит в том, чтобы выяснить, сколько подсчеты баллов попадают в инклюзивном диапазоне каждого ( LOWERLIMIT [I], UPPERLIMIT [I]) пара. Пример 1: Исходные данные: забивает = [1,3,5,6,8] lowerLimits = [2] upperLimits = [6] Выход: [3] Пояснение: Три элемента (3,5 и 6) в массиве баллов, попадают внутрь инклюзивный диапазон [2,6] Пример 2: Входы: забивает = [4,8,7] lowerLimits = [2,4] upperLimits = [8,4] Выход: [3,1] Пояснение: Все три элемента (4 , 8 и 7) в массиве баллов, попадают внутрь первого диапазона включительно [2,8] и только один элемент (4) находится в пределах диапазона включительно [4,4]. Таким образом, ответ должен быть возвращен в массив отсчетов [3,1]. Какой алгоритм я пытался до сих пор? 1. Итерации по каждому LOWERLIMIT - UPPERLIMIT пару 2. Для этой пары проверить все оценки значения 3. Повторите шаг 1 до 2 для всех LOWERLIMIT - UPPERLIMIT пара Python 3 Реализации # функции полезности четкости (предложения о работе баллов, lowerLimits, upperLimits): ответ = [ ] для индекса, элемента Перечислит (lowerLimits): манекен = [] для очков в баллах: если оценка> = lowerLimits [индекс] и оценка
sircasms
1

голосов
0

ответ
37

Просмотры

оптимизации времени для запросов GET к серверу в питоне

Я должен принести большой список URL изображения от в CSV и генерировать получать запросы для этих адресов. В настоящее время я могу иметь выход 50 URLs I 17S. Я хочу, чтобы эти 50 URLs изображения в 5s. Как можно оптимизировать по запросу получить? Я читал, что один из способов будет сделать многопоточность от Я понятия не имею, о его интеграции в мой код? код импорт панда как PD импорт запросы auth_token = 'WY' DF = pd.read_csv ( '/ instaurls.csv') для строки в df.itertuples (): URL = строка [1] соответственно = requests.get ( 'HTTP: / / предсказать / этнической принадлежности? auth_token =% s & URL =% s'% (auth_token, URL)) печати (resp.status_code) печати (resp.json ())
Rehan Aziz
1

голосов
0

ответ
66

Просмотры

Невозможно минимизировать отрицательные числа в clingo

Я столкнулся с проблемой, пытаясь оптимизировать значение, которое может работать в отрицательных чисел: {выбрать (-1..10)} = 1. #minimize {C @ 1: выбрать (C)}. С учетом указанных выше кода, после того, как я запускаю его, я получаю: Ответ: 1 выбрать (-1) Оптимизация: 0 ОПТИМАЛЬНЫЕ НАЙДЕНО Модели: 1 Optimum: да Оптимизация: 0 Звонки: 1 Время: 0.004s (Решение: 0,00 с первой модели: Unsat 0,00 с: 0,00 с) Время процессора: 0.000s не следует минимальное значение равно -1? Или есть еще нужно сделать, чтобы свести к минимуму отрицательной стоимости?
kanghj91
1

голосов
1

ответ
50

Просмотры

Optimizing iteration of list in list on python

У меня есть немного проблемы оптимизации (я вроде новичок в Python и Stackoverflow). Я строй коллокация сети слова для исследовательского проекта. Код, который я написал принимает стебли текста без остановки слов (text_c) и делит его на предложения. Для каждого предложения, то в перебирает условия для того, чтобы построить взвешенную семантическую сеть, что я тогда процесс с NetworkX. Это частично на основе словаря вида { «слово»: значного} (ОПК ниже). Кодовые перебирает список существующих ребер сети (представлены в виде списков 3 элементов). Проблема может быть как петля по сети растет в геометрической прогрессии (каждый раз, когда новый фронт / список добавляются, увеличивается в размерах петли). Есть около 110К предложений в тексте, так что это занимает слишком много времени (это последний занял 4 часа, чтобы бежать и не закончил). Там должен быть лучший способ сделать это. Будет ли «за» заявление быть более эффективным, чем внешний вид? Как это будет работать? Спасибо! #determine семантической сети выходной_файла = открыта ( "00_network _" + ул (с) + "CSV.", "а") сети = [] эр = 0 данных = text_c.split ( ""), для линий в данном: linew = lines.split () = побежал LEN (linew), если RAN> 3: #sentences более чем трех слов я = 0, а г <Ран: J = + 1, а J <побежал: попробовать: previous_edge = [] для п в сеть: если п [0] == DIC [linew [I]] и н [1] == DIC [linew [J]]: previous_edge = [п [0], п [1], п [2]], если previous_edge == []: new_edge = [DIC [linew [I]], DIC [linew [J]],
JP PG
1

голосов
0

ответ
113

Просмотры

Распад MEM_LOAD_UOPS_RETIRED.L3_MISS события в Intel Бродуэлла-EP

Я пытаюсь сравнить согласованность и стоимость доступа памяти DRAM для приложения. Для этого, я имею в виду измерения (в частности MEM_LOAD_UOPS_RETIRED.L3_MISS) события L3_MISS и сравнить его с HITM события (в частности MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HITM и MEM_LOAD_UOPS_L3_MISS_RETIRED.REMOTE_HITM). Глядя на описание события L3_MISS в PERFMON странице (ссылка) я нашел следующее описание: Miss в последнем уровне (L3) кэша. Исключает Неизвестный источник данных. Исходя из этого определения у меня есть три вопроса: Означает ли это, в приведенном выше описании, что подсчет событий L3_MISS не включает в себя кросс-сокетов HITM события (так как источник неизвестен)? Я не мог найти более подробное описание в Intel SDM и ссылку на 2016 Optimization. Рассуждая далее, это значит, что все подкомпоненты L3_MISS - {LOCAL_DRAM, REMOTE_DRAM, REMOTE_FWD} также не включены в L3_MISS рассчитывать? Или мне не хватает какой-то определение неизвестного источника данных в Intel SDM? Заранее спасибо! PS: System Info - Бродуэлла E5 2660v4, используя PAPI, чтобы получить счетчик числа производительности
YetAnotherPseudoName
1

голосов
1

ответ
264

Просмотры

Ускорение индексации фантазии с NumPy

У меня есть два Numpy массива и каждый из них имеет форму (10000,10000). Одним из них является массивом значения, а другой является индекс массива. Значение = np.random.rand (10000,10000) Index = np.random.randint (0,1000, (10000,10000)) Я хочу, чтобы сделать список (или 1D Numpy массив) путем суммирования всех "массив Value" со ссылкой на «Индекс массива». Например, для каждого индекса I, находя соответствие индекса массива и давая ему значение массива в качестве аргумента для г в диапазоне (1000): NewArray [I] = np.sum (значение [np.where (Индекс == я)]) Однако, это слишком медленно, так что я должен сделать эту петлю через 300000 массивов. Я пытался придумать какой-то логический метод индексации, как NewArray [Index] + = значение [Индекс] Но это не сработало. Следующая вещь, которую я пытался использует словарь для K, V в списке (застежка-молния (Index.flatten (), Value.flatten ())): NewDict [к] .append (v) и я в NewDict: NewDict [я] = пр.
Ji woong Yu
1

голосов
0

ответ
103

Просмотры

Менее агрессивная оптимизация цикла при использовании Printf чем соиЬ

Этот вопрос является продолжением к этому: Вопросу о неопределенном поведении (UB) и оптимизации контура При использовании https://godbolt.org/ онлайна компилятора (г ++ 7.2, x86_64) с -O2 настройкой, условие цикла получает оптимизированное, когда цикл содержит зЬй :: COUT, но не с идентичной петлей с использованием Printf. Любая идея, почему? Обе версии кода компилируются с компилятором C ++. Оба варианта дают предупреждение о UB, но не предупреждение без -O2, даже если код все еще находится в UB земли. FWIW, я также попробовал г ++ компилятор MIPS, что один, кажется, не оптимизировать из условия цикла даже с версией кода станд :: соиЬ и -O2. Я могу обеспечить выходы компилятора, если это необходимо, но станд :: соиЬ версию довольно долго. # include INT основных () {для (INT I = 0; я <300; я ++) Е ( "% d% d", I, I * 12345678); 0; я <300; я ++) станд :: соиЬ
Erik Alapää
1

голосов
0

ответ
74

Просмотры

Черный ящик комбинаторной оптимизации над перестановок

Я решении общих проблем оптимизации черный ящик, как: х *: Р (х) -> мин, где х являются перестановками длины N (N = 50, например, так перебор не представляется возможным). Целевая функция F (X) представляет автономный компьютерный код и х представляет собой конфигурацию комплексной системы с ответом, имитируемой F (х). Я узнал, что в этом случае я могу использовать много эвристических методов. Но большинство из этих методов всегда использовать какое-то локальный поиск, которые требуют подходящего расстояния метрики в пространстве поиска (пространство перестановок х в моем случае). Под подходящего расстоянием метрики Я имею в виду метрику, которые выполняют свойство «локальность», например, малое изменение перестановки х произвести небольшое изменение целевой функции F (X). В моем случае не известно, любое подходящее расстояние метрику с этим свойством, поэтому любой вид локального поиска почти случайный поиск. У меня есть несколько вопросов: Есть ли какие-либо доступны эвристические черный ящик комбинаторные методы оптимизации, которая не использует локальный поиск и / или любое расстояние метрики в пространстве поиска? Мне нужно преодолеть низкий «локальность» проблемы или просто тот факт, что любое подходящее расстояние метрики в пространстве поиска неизвестна. Является ли свойство «местонахождение» действительно настолько ограничены в комбинаторной оптимизации в целом? Может быть, я что-то пропустил ..., но большинство из реального мира черного ящика комбинаторной задачи имеет низкую или очень низкую «локальность» в связи с тем, что показатели расстояния общих перестановок (Хэмминг, Кендал и т.д.) не являются подходящие метрики в целом. Есть ли общий способ, как найти подходящее расстояние метрики в пространстве поиска, чтобы удовлетворить по крайней мере, примерно " с (Оценка распределения алгоритмов), например. Основная причина этого вопроса, какие виды оптимизации эвристики, пригодны для решения такого рода проблем.
michal
1

голосов
0

ответ
44

Просмотры

oscillating genetic algorithm

Я пытаюсь реализовать генетический алгоритм на моем собственном, который оптимизирует два вектора. Существует граничное условие, где должно быть всегда больше, чем Ь. Записи векторов находятся в диапазоне от 1 до 15. Моей реализации работала на 1 вектор, но генетический алгоритм не сходится 2 векторов. Векторы испытываются в физической модели, которые выдают стандартное отклонение, которое должно быть минимальным в 0. Можно достичь этого значения, и им пытаются найти его с помощью генетического алгоритма я написал. Я мог бы сломать эту проблему рекомбинации и мутации: Когда recombinating или мутирует б имеет возможность получить больше, чем. Физическая модель, которая проверяет векторы не имеет смысла больше в этот момент так мойки стоимости фитнеса, хотя это было хорошо раньше. Для мутации я мог бы решить проблему с плохим стилем, чтобы только значения, которые держат б меньше, чем. Для рекомбинации, хотя я не понимаю, как решить эту проблему withouth ломая идею генетического алгоритма. например, родители: a1 = 1,1,9,9- и а2 = 9,9,1,1. b1 = 1,3,1,3 и b2 = 3,1,3,1 a1' = 1,1,1,1 и а2' = 9,9,9,9 b1' = 1,3,3,1 и b2 = 3,1,1,3 Тогда b1' больше, чем a1' . Алгоритм сходится к точке, где он прыгает обратно до низких уровней пригодности в качестве решения а и б, кажется, очень похожи друг на друга, поэтому алгоритм не сходится до определенного момента, терпит неудачу, и затем начинается снова. Я думаю, что я пропускаю точку где-то, но не могу найти его. т получить, как решить эту проблему withouth ломая идею генетического алгоритма. например, родители: a1 = 1,1,9,9- и а2 = 9,9,1,1. b1 = 1,3,1,3 и b2 = 3,1,3,1 a1' = 1,1,1,1 и а2' = 9,9,9,9 b1' = 1,3,3,1 и b2 = 3,1,1,3 Тогда b1' больше, чем a1' . Алгоритм сходится к точке, где он прыгает обратно до низких уровней пригодности в качестве решения а и б, кажется, очень похожи друг на друга, поэтому алгоритм не сходится до определенного момента, терпит неудачу, и затем начинается снова. Я думаю, что я пропускаю точку где-то, но не могу найти его. т получить, как решить эту проблему withouth ломая идею генетического алгоритма. например, родители: a1 = 1,1,9,9- и а2 = 9,9,1,1. b1 = 1,3,1,3 и b2 = 3,1,3,1 a1' = 1,1,1,1 и а2' = 9,9,9,9 b1' = 1,3,3,1 и b2 = 3,1,1,3 Тогда b1' больше, чем a1' . Алгоритм сходится к точке, где он прыгает обратно до низких уровней пригодности в качестве решения а и б, кажется, очень похожи друг на друга, поэтому алгоритм не сходится до определенного момента, терпит неудачу, и затем начинается снова. Я думаю, что я пропускаю точку где-то, но не могу найти его. Алгоритм сходится к точке, где он прыгает обратно до низких уровней пригодности в качестве решения а и б, кажется, очень похожи друг на друга, поэтому алгоритм не сходится до определенного момента, терпит неудачу, и затем начинается снова. Я думаю, что я пропускаю точку где-то, но не могу найти его. Алгоритм сходится к точке, где он прыгает обратно до низких уровней пригодности в качестве решения а и б, кажется, очень похожи друг на друга, поэтому алгоритм не сходится до определенного момента, терпит неудачу, и затем начинается снова. Я думаю, что я пропускаю точку где-то, но не могу найти его.
Andy
1

голосов
0

ответ
147

Просмотры

How do I mathematically represent affine transform of an image?

У меня 2 изображения в оттенках серого А и В. Я выполнения аффинное преобразование (вращение и перевод) на B. Я затем вычисления стандартного отклонения (AB *), где В *: В * = affine_transform (Б) Я хочу для запуска градиентного спуска, чтобы найти оптимальные значения & thetas, ТХ и ти таким образом, что моя функция F (θ, Тх, Ту) сведена к минимуму. е (θ, Тх, Ту) = σ (AB *) Однако у меня возникают проблемы на самом деле выписывая аффинное преобразование математически. Мне нужно сделать это прежде, чем я могу вычислить градиент для оптимизации процесса. Я знаю, что преобразованные точки будут рассчитываться по: [UV 1] = [XY-1] * [совы (θ) -sin (θ) 0; Sin (θ) COS (θ) 0; ТХ ти 1], где Х = [x1, x2 ..... хп] 'и Y = [y1, y2 ..... ут]' были бы векторы-столбцы, представляющие пиксельные индексы B. После этого я хотел бы использовать какой-либо метод интерполяции переназначить значение пикселей на их вновь расчетных показателях. Однако вышеуказанный шаг преобразования индекса представляет собой только часть расчета, что на самом деле использует & thetas, TX или ти. Первоначально я предположил, что я должен был бы частично дифференцировать матрицу преобразования от & thetas, ТХ и ти, но это дает, казалось бы, неверный результат: Дифференцирование WRT & thetas: [sin (θ) -cos (θ) 0; сов (θ) -sin (θ) 0; 0 0 0] WRT ТХ: [0 0 0; 0 0 0; 1 0 1] WRT ти: [0 0 0; 0 0 0; 0 1 1] Парциальные дифференциалы WRT Те и Ty отобразить все пиксели в изображении с теми же индексами 2 [1,0] и [0,1], который не может быть правильным. Любая помощь в выяснении, как кадр функции затрат здесь будет высоко оценен. ТХ или ти. Первоначально я предположил, что я должен был бы частично дифференцировать матрицу преобразования от & thetas, ТХ и ти, но это дает, казалось бы, неверный результат: Дифференцирование WRT & thetas: [sin (θ) -cos (θ) 0; сов (θ) -sin (θ) 0; 0 0 0] WRT ТХ: [0 0 0; 0 0 0; 1 0 1] WRT ти: [0 0 0; 0 0 0; 0 1 1] Парциальные дифференциалы WRT Те и Ty отобразить все пиксели в изображении с теми же индексами 2 [1,0] и [0,1], который не может быть правильным. Любая помощь в выяснении, как кадр функции затрат здесь будет высоко оценен. ТХ или ти. Первоначально я предположил, что я должен был бы частично дифференцировать матрицу преобразования от & thetas, ТХ и ти, но это дает, казалось бы, неверный результат: Дифференцирование WRT & thetas: [sin (θ) -cos (θ) 0; сов (θ) -sin (θ) 0; 0 0 0] WRT ТХ: [0 0 0; 0 0 0; 1 0 1] WRT ти: [0 0 0; 0 0 0; 0 1 1] Парциальные дифференциалы WRT Те и Ty отобразить все пиксели в изображении с теми же индексами 2 [1,0] и [0,1], который не может быть правильным. Любая помощь в выяснении, как кадр функции затрат здесь будет высоко оценен. 0 1 1] Парциальные дифференциалы WRT Те и Ty отобразить все пиксели в изображении с теми же индексами 2 [1,0] и [0,1], который не может быть правильным. Любая помощь в выяснении, как кадр функции затрат здесь будет высоко оценен. 0 1 1] Парциальные дифференциалы WRT Те и Ty отобразить все пиксели в изображении с теми же индексами 2 [1,0] и [0,1], который не может быть правильным. Любая помощь в выяснении, как кадр функции затрат здесь будет высоко оценен.
novice_coder
1

голосов
1

ответ
85

Просмотры

MySQL Query принимает очень долгое время

У меня есть запрос, который принимает список станций вокруг данного места, и от другого поиска таблицы для идентификатора для строки, которая имеет те же координаты, как станции запрошенные и сцепляет все столбцы «Line», которые имеют такой же идентификатор, как одна опрошено из второй таблицы. Запрос выглядит следующим образом SELECT, например, пространство имен, Stations.Name, Stations.Lat, Stations.Lon, Temp, влажно, (SELECT ID FROM transportData.stations WHERE stations.Lat = Stations.Lat И stations.Lon = Stations.Lon) AS 'StationID', (6371 * ACOS (Cos (радианы (44.436292)) * Cos (радианы (Stations.Lat)) * Cos (радианы (Stations.Lon) - радиан (26,102452)) + sin (радианы (44,436292)) * sin (радианы (Stations.Lat)))) как расстояние (ВЫБРАТЬ GROUP_CONCAT (разделительная линия ';') FROM transportData.timeTables WHERE расписаний. Станция = StationID GROUP BY timeTables.Station) AS 'Lines' из `` Stations` ГДЕ Namespace` LIKE "% 8" HAVING расстояние <0,1 ORDER BY расстояние, однако, этот запрос, который будет возвращать только одну станцию ​​(в пределах радиуса 100 м предоставленных координат) занял 58 секунд для выполнения. Любые советы о том, как оптимизировать это? EDIT: Таблица станций: + ----------- + --------------- + ------ + ----- + - ------- + ------- + | поле | Тип | Null | Ключ | По умолчанию | Extra | + ----------- + --------------- + ------ + ----- + -------- - + ------- + | Instance | VARCHAR (6) | НЕТ | PRI | NULL | | | Пространство имен | VARCHAR (10) | НЕТ | | NULL | | | Имя | VARCHAR (255) | НЕТ | | NULL | | | Lat | десятичный (9,6) | НЕТ | | NULL | | | Lon | десятичное (9, 6) | НЕТ | | NULL | | | Temp | плавать | ДА | | NULL | | | Влажный | плавать | ДА | | NULL | | | Bio | VARCHAR (3000) | ДА | | NULL | | | Фото | VARCHAR (1000) | ДА | | NULL | | | Телефон | VARCHAR (255) | ДА | | NULL | | | Веб-сайт | VARCHAR (255) | ДА | | NULL | | | OpenHours | VARCHAR (1024) | ДА | | NULL | | + ----------- + --------------- + ------ + ----- + -------- - + ------- + transportData.stations стол: + ------- + ------------- + ------ + ----- + --------- + ---- --- + | поле | Тип | Null | Ключ | По умолчанию | Extra | + ------- + ------------- + ------ + ----- + --------- + ---- --- + | ID | INT (11) | НЕТ | PRI | NULL | | | Имя | VARCHAR (50) | НЕТ | | NULL | | | Lat | VARCHAR (15) | НЕТ | | NULL | | | Lon | VARCHAR (15) | НЕТ | | NULL | | | Тип | VARCHAR (20) | НЕТ | | NULL | | + ------- + ------------- + ------ + ----- + --------- + ---- --- + графикам стол: + ---------- + --------------- + ------ + ----- + --------- + ---------------- + | поле | Тип | Null | Ключ | По умолчанию | Extra | + ---------- + --------------- + ------ + ----- + --------- + ---------------- + | ID | INT (11) | НЕТ | PRI | NULL | auto_increment | | линия | VARCHAR (10) | НЕТ | | NULL | | | станция | INT (11) | НЕТ | | NULL | | | Будни | VARCHAR (3500) | НЕТ | | NULL | | | Выходные дни | VARCHAR (3500) | НЕТ | | NULL | | + ---------- + --------------- + ------ + ----- + --------- + ---------------- + EDIT: Я пытался использовать некоторые пространственные функции MariaDB, и нашел, что это работает ST_Distance (точка (44.436292,26.102452), точка (широта, долгота)), но это дает мне странные показания, которые не похожи с теми, из формулы я уже имел.
George Lazu
1

голосов
1

ответ
64

Просмотры

Why does getting values out of a map iterator take so long?

У меня есть два словаря, A и B. А словарь словарей. Клавиши во втором уровне словарей совпадают ключи в B. Например, может быть: А [ключ1] [Key_1] = 1 А [ключ1] [Key_2] = 4 А [ключ1] [Key_3] = 2 А [ключ2 ] [Key_2] = 5 а [ключ3] [Key_1] = 1 а [ключ3] [Key_3] = 2 и В может быть: B [Key_1] = 7 В [Key_2] = 8 В [Key_3] = 9 Я написал цикл для умножения значения в каждой клавише А на в, для A.keys в-ключа (): sum_Akey [Akey] = сумма (карта (лямбда х: А [Akey] [х] * в [х], в) ), где sum_Akey представляет собой словарь для хранения сумм. Он ключ один и то же значения, как верхние клавиши уровня в A. Например: sum_Akey [ключ1] = 1 * 7 + 4 * 8 + 2 * 9 = 57 При достаточно большом А и В, это занимает очень много времени, , Из любопытства я удалил сумму (), чтобы увидеть, что произойдет. Снятие суммы () делает его работать намного быстрее. Я пробовал другие подходы, например, составление списка из карты, а затем суммирование. Оказывается, что делать что-либо на объекте карты является узким местом. Есть еще один, более быстрый способ, чтобы получить сумму значений в карте итератора? Есть ли более быстрый способ получить окончательную сумму? Примечание: я нашел Q & A только сейчас. Он отвечает на один из моих вопросов. питон карта, список (карта), лямбда и производительность
user1757436
1

голосов
0

ответ
63

Просмотры

Оценка параметров системы ОДУ с помощью нескольких наборов данных

У меня есть система 2 ОДЫ, и я хочу, чтобы соответствовать этой системе к некоторым данным, чтобы оценить некоторые параметры модели. Есть два набора данных. Я хочу, чтобы соответствовать модели для этих двух наборов данных одновременно и параметры должны быть такими же, когда установлены для данных. Данные у меня дается как сумма за определенный период. К примеру, в data1 первый элемент является суммой состояния А в течение периода времени от 2-4 часов. Таким образом, для каждого интервала tiem у меня есть в общей сложности за этот период времени в каждом наборе данных. Из-за этого время я одновременно прилегают к двум наборам данных я также должен пройти через из интервалов времени (4 2-4,5-7,8-10,11-13). Если данные были приведены только для одного непрерывного периода времени, например, время = 2: 13 Я знаю, как оценить параметры. Но теперь я не уверен, как я реализовал это правильно. Это код, который я написал. % данных т = [2 3 4 5 6; 7; 8 9 10; 11 12 13]; data1 = [5,399537437; 6,762059387; 7,34552533; 7,675700967]; data2 = [0,153279989125067; 7,395870359956480; 3,519156383296502; 2,553056632299227]; % Начальные предположения к0 = [0,001; 0,001; 0,001]; фунт = [0,0.0002,0]; UB = Inf * те (1,3); х = {т, data1, data2}; [FittedVal, fval] = fmincon (@ (к) SSQ (к, х), к0, [], [], [], [], б, UB) функция ошибки = SSQ (к, х) = время х { 1,1}; data1 = х {1,2}; data2 = х {1,3}; Ошибка = 0; для него = 1: 4 = оборудованной модели (K, время (это, :)); ошибка = ошибка + (сумма ((установлен-data1 (она)) ^ 2).) + (сумма ((установлен-data2 (она)) ^ 2).); конец конец функция вывод = модель (к, время) b0 = [0; 3,13];% начальные условия [время, значение] = ode45 (@ уравнения, время, b0); Функция S = Уравнения (T, Y) S = нули (2,1); Rep = 0,204; аг = 0,3368; проведение = 10 ^ 9; carrying2 = 1 * 10 ^ 8; с (1) = (Rep * у (1)) * (1- (у (1) / переноски)) - к (2) * аг * у (1) * (1- (у (2) / carrying2) ) + к (3) * у (2); с (2) = к (2) * аг * у (1) * (1- (у (2) / carrying2)) + к (1) * у (2) -k (3) * у (2); Конец выходного значения = (:, 2) + (значения: 1); конец Подходит для всех точек данных я использую для цикла. Это правильный путь идти о нем? В этом я не уверен, если я должен накапливать ошибки в течение цикла. Кроме того, поскольку эти моменты времени связаны, что когда я начинаю период от 5-7, данные из 2-4 должны иметь влияние, я хочу, чтобы изменить начальные условия для ода решателя ode45 с конечным значением результаты модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13] с (2) = к (2) * аг * у (1) * (1- (у (2) / carrying2)) + к (1) * у (2) -k (3) * у (2); Конец выходного значения = (:, 2) + (значения: 1); конец Подходит для всех точек данных я использую для цикла. Это правильный путь идти о нем? В этом я не уверен, если я должен накапливать ошибки в течение цикла. Кроме того, поскольку эти моменты времени связаны, что когда я начинаю период от 5-7, данные из 2-4 должны иметь влияние, я хочу, чтобы изменить начальные условия для ода решателя ode45 с конечным значением результаты модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13] с (2) = к (2) * аг * у (1) * (1- (у (2) / carrying2)) + к (1) * у (2) -k (3) * у (2); Конец выходного значения = (:, 2) + (значения: 1); конец Подходит для всех точек данных я использую для цикла. Это правильный путь идти о нем? В этом я не уверен, если я должен накапливать ошибки в течение цикла. Кроме того, поскольку эти моменты времени связаны, что когда я начинаю период от 5-7, данные из 2-4 должны иметь влияние, я хочу, чтобы изменить начальные условия для ода решателя ode45 с конечным значением результаты модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13] Это правильный путь идти о нем? В этом я не уверен, если я должен накапливать ошибки в течение цикла. Кроме того, поскольку эти моменты времени связаны, что когда я начинаю период от 5-7, данные из 2-4 должны иметь влияние, я хочу, чтобы изменить начальные условия для ода решателя ode45 с конечным значением результаты модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13] Это правильный путь идти о нем? В этом я не уверен, если я должен накапливать ошибки в течение цикла. Кроме того, поскольку эти моменты времени связаны, что когда я начинаю период от 5-7, данные из 2-4 должны иметь влияние, я хочу, чтобы изменить начальные условия для ода решателя ode45 с конечным значением результаты модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13] Я хочу изменить начальные условия для ода решателя ode45 с конечным значением результатов модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13] Я хочу изменить начальные условия для ода решателя ode45 с конечным значением результатов модели предыдущего момента времени, будучи в качестве начальных условий на следующий период времени. Как я могу это сделать, потому что в данный момент в каждой для итерации цикла у меня есть b0 = [0; 3,13]
sam_rox
1

голосов
0

ответ
407

Просмотры

Constraint оптимизация в TensorFlow (или GPFlow)

Примером может служить следующее: Цель состоит в том, чтобы оптимизировать функцию F (x1, .., Xn) при ограничении x1 + .. + Xn = 1, 0 <X_i
Maximilian Mordig
1

голосов
0

ответ
21

Просмотры

Как оптимизировать изображения для Mozilla и хрома

Я строю сайт и у меня есть изображения для различных категорий, они отображаются нормально в хроме (см рисунок ниже): Но, в Mozilla, они отображаются следующим образом: Мой HTML и CSS код для этой категории карты: .category- изображение {ширина: 100%; высота: 32%; -webkit-высота: 32%; -moz-высота: 32%; } .Category-изображения: парить {коробчатого тень: 0px 0px 20px черный; } PS4 GAMES Мой вопрос, как оптимизировать эти изображения с помощью CSS, так что они работают как на браузере, как они должны?
lyyka
1

голосов
0

ответ
137

Просмотры

Почему существует scipy.optimize.least_squares когда scipy.optimize.minimize потенциально могут быть использованы для тех же вещей?

Я пытаюсь понять, почему scipy.optimize.least_squares существует в SciPy. Эта функция может быть использована для выполнения модели-фитинг. Тем не менее, можно было бы использовать scipy.optimize.minimize, чтобы сделать то же самое. Единственное отличие состоит в том, что scipy.optimize.least_squares делает расчет хи-квадрат внутри, а если кто-то хочет использовать scipy.optimize.minimize, он / она будет иметь для расчета хи-квадрат вручную внутри функции пользователь хочет свести к минимуму. Кроме того, scipy.optimize.least_squares нельзя считать оболочку вокруг scipy.optimize.minimize, потому что три метода он поддерживает (TRF, dogbox, ле), не поддерживается вообще по scipy.optimize.minimize. Так что мои вопросы: Почему scipy.optimize.least_squares существует, когда тот же результат может быть достигнут с scipy.optimize.minimize? Почему scipy.optimize.minimize не поддерживает TRF, dogbox и ле методы? Спасибо.
AstrOne
1

голосов
0

ответ
47

Просмотры

Какова стоимость перемещения данных между VPU и регистров FPU?

На PowerPC (PS3), перенос между регистрами и векторных регистров с плавающей точкой, также прошедших через память, что может привести к дорогостоящим кэш-промахов, и, таким образом, требуется минимизировать ненужные преобразования. Это верно и для других современных архитектур? Я особенно любопытно мобильный, где я понимаю, что латентность памяти, безусловно, является ограничивающим фактором. Примечание: Это для низкоуровневого 3D математической библиотеки с использованием SSE (встроенные функции и в конечном счете другие), и я пытаюсь оптимизировать латентности памяти.
johnb003
1

голосов
0

ответ
32

Просмотры

Optimize fluent validation code from duplicating to one extension method

public interface IAdditional { int Id { get; set; } string Version { get; set; } } public interface IUser { string Name { get; set; } } // dto public class CreateUser : IUser { public string Name { get; set; } } // dto public class UpdateUser : IAdditional, IUser { int Id { get; set; } string Version { get; set; } public string Name { get; set; } } internal class UserValidator : AbstractValidator { public UserValidator() { When(u => u is IAdditional, () => { RuleFor(u => (u as IAdditional).Id) .GreaterThan(0); RuleFor(u => (u as IAdditional).Version) .NotEmpty(); }); RuleFor(u => u.Name).NotEmpty(); } } So, how I could optimize this code part: When(u => u is IAdditional, () => { RuleFor(u => (u as IAdditional).Id) .GreaterThan(0); RuleFor(u => (u as IAdditional).Version) .NotEmpty(); }); This code part i use in every controller. Every controller has f-validator and in every f-validator I use this code lines. It should be great to move it to separate class and reuse it in every f-validator. Tried look to extension method, but I can't understand how it to use make working
Gyciauskas
1

голосов
0

ответ
29

Просмотры

SOM kmean оптимизация ValueError: все входные массивы должны иметь одинаковое число измерений

Я пытаюсь объединить kmeans Into SOM находя лучший блок матча. Во время точки кластеризации для возврата числа кластеров для каждой точки я эта ошибка «ValueError: все входные массивы должны иметь одинаковое число измерений» в строке 159 distances_from_center = np.concatenate ((distances_from_center, [расстояние (преподаватель, узлы)] )) Я пытаюсь оптимизировать SOM с помощью быстрого kmeans подхода. N = 8 # линейного размер карты 2D М = 8 n_teacher = 10000 # # сигнального преподаватель np.random.seed (100) # тест семян для случайного числа Защиты основного (): # инициализации узлов векторов узлов = np.random.rand (N, M, 3) массив # узел. каждый узел имеет 3-тусклый весовой вектор #nodes = centers_initiation (n_teacher, 4) #initial из положить #TODO; оформляют поставить функцию, чтобы упростить здесь plt.imshow (узлы, интерполяции = «None») PLT.
Appiah Kubi
1

голосов
0

ответ
36

Просмотры

fgoalattain не может восстановить из NaN значений в производных функций

Я использую fgoalattain в Matlab на функцию с двумя obejctives быть сведены к минимуму. При вычислении производных, может случиться так, что один из этих eveluation терпит неудачу, отдавая в NaN. Насколько я знаю, алгоритм должен быть способен выйти из этой ситуации, и это было также подтвержден некоторым предшествующим опытом с fmincon, который использует тот же ПМК решатель. В этом случае нет повторных попыток с различным размером шага не выполняются, и процесс оптимизации, конечно, останавливается. Границы и ограничения fullfilled с запасом, так что я не знаю, почему он не пытается повторно. Кто-нибудь ключ? Большое спасибо заранее, Джузеппе.
G. Matrangolo
1

голосов
0

ответ
53

Просмотры

Optimally Find Empty Space On Grid

Я надеюсь, что кто-то может мне помочь оптимизировать алгоритм, я имею дело с в моем текущем проекте. Это кодируется в C #, но в большей степени логической задачи. У меня есть двумерный массив BOOLS (сетка), которые действуют в качестве контейнера прямоугольников. Когда прямоугольник находится на сетке, она переключает Bools к истине. Пустое пространство = ложь занятого пространства = верно Теперь для задачи. Как найти ближайшую занятую позицию в точку (х, у), где прямоугольник шириной (W) и высота (h) может поместиться без наложений в занимаемой площади? Я сделал очень наивные реализации базовой, который работает следующим образом: WHILE пункт не найден SET г до ближайшей бесконтрольно сетки точки SET allempty истины ДЛЯ КАЖДОГО х значения в Rect (I) для каждого значения у в Rect (J) IF Gridpoint [ I, J] занят SET allempty к ложному; END IF END FOR END FOR ЕСЛИ allempty ВОЗВРАТ г в качестве законного места END IF END WHILE Но я знаю, что есть другие, более эффективные способы выполнения этой операции. Кто-нибудь может мне точку в алгоритме, который мог бы сделать это более эффективно? Спасибо за ваше время
ADaurio
1

голосов
1

ответ
58

Просмотры

Объект Prefetch не работает с order_by QuerySet

Использование Django 11 с PostgreSQL дб. У меня есть модели, как показано ниже. Я пытаюсь упреждающим родственная QuerySet, используя объект Prefetch и prefetch_related без присвоения его атрибут. класс Person (модель): имя = CharField () @property Защиты latest_photo (Я): возвращение self.photos.order_by ( 'created_at') [- 1] Класс фото (модель): человек = ForeignKey (Person, related_name = 'фотографии ') created_at = models.DateTimeField (auto_now_add = True) first_person = Person.objects.prefetch_related (Prefetch (' фото, QuerySet = Photo.objects.order_by ( 'created_at'))). первый () first_person.photos.order_by ( «created_at») # по-прежнему попадает в first_person.latest_photo базы данных # по-прежнему попадает в базу данных в идеальном случае, вызов person.latest_photo не попал в базу данных снова. Это позволит мне использовать эту собственность безопасно в списке на экране. Однако, как было отмечено в комментариях в коде, загружается предварительно QuerySet не используются, когда я пытаюсь получить последнюю фотографию. Это почему? Примечание: Я попытался с помощью to_attr аргумента Prefetch и что, кажется, работает, однако, он не идеален, так как это означает, что я должен был бы latest_photo редактировать, чтобы попытаться использовать упреждающий атрибут.
Thomas Martres
1

голосов
0

ответ
57

Просмотры

Моделирование капли эффективности машины после определенных часов работы

Я строй линейной модели программирования машин, производящих некоторые детали в AMPL с использованием CPLEX решателя. Моя проблема заключается в том, как модель 10% шаг эффективности падения машины после 100 часов работы. Я знаю, что правильный подход в моем случае использовать двоичную переменную. К сожалению, я не имею ни малейшего представления о том, как управлять этим. Не могли бы вы показать пример, как описанная выше модель поведения линейного программирования? EDIT: прикрепление текущего Ampl код данных: данные; пары М: = 3; # Машина кол паров N: = 5; # части рассчитывать эффективность парам: # эффективность [шт / ч] 1 2 3 4 5: = 0,85 1,30 1 0,65 1,50 0,40 2 0,65 0,80 0,55 1,50 0,70 3 1,20 0,95 0,35 1,70 0,40; пары Р: затраты = 1 # 45 машины [USD / ч] 2 35-40; пары C: = 1 # 60 минимальные изготовленные подсчеты particulat частей 2 60 3 60 4 120 5 120; Модель: модель; пары М; # Машина кол пары N; # часть рассчитывать эффективность пар {1..m, 1..N}; # Эффективность [пк / ч] Р {пар 1..m}; # Затраты на машинах [USD / ч] пары С {1..N}; # Минимальные изготовленные отсчеты particulat части вар т {1..m, 1..N}; # Раз [машина, часть] вар д {п в 1..N} = {сумма м 1..m} т [т, п] * КПД [т, п]; минимизации стоимости: сумма {м 1..m, п в 1..N} R [м] * т [т, п]; при условии c1 {N} в 1..N: д [п]> = С [п]; при условии t1 {м 1..m}: {сумма п в 1..N} т [т, п] = 0; # раз должны неотрицательным # Эффективность [пк / ч] Р {пар 1..m}; # Затраты на машинах [USD / ч] пары С {1..N}; # Минимальные изготовленные отсчеты particulat части вар т {1..m, 1..N}; # Раз [машина, часть] вар д {п в 1..N} = {сумма м 1..m} т [т, п] * КПД [т, п]; минимизации стоимости: сумма {м 1..m, п в 1..N} R [м] * т [т, п]; при условии c1 {N} в 1..N: д [п]> = С [п]; при условии t1 {м 1..m}: {сумма п в 1..N} т [т, п] = 0; # раз должны неотрицательным # Эффективность [пк / ч] Р {пар 1..m}; # Затраты на машинах [USD / ч] пары С {1..N}; # Минимальные изготовленные отсчеты particulat части вар т {1..m, 1..N}; # Раз [машина, часть] вар д {п в 1..N} = {сумма м 1..m} т [т, п] * КПД [т, п]; минимизации стоимости: сумма {м 1..m, п в 1..N} R [м] * т [т, п]; при условии c1 {N} в 1..N: д [п]> = С [п]; при условии t1 {м 1..m}: {сумма п в 1..N} т [т, п] = 0; # раз должны неотрицательным
Madras
1

голосов
0

ответ
35

Просмотры

IPOPT находит оптимальное решение на втором решении

Обычно, когда я пытаюсь решить с IPOPT н, даже если задача неразрешима, IPOPT показывает запущенный процесс и, например, показывает, сколько ограничений проблемы есть и другие общие сведения о проблеме, но на этот раз я столкнулся со странной проблемой. первый раз, когда я решить эту проблему не показывает ничего, но второй раз я ее решить, IPOPT возвращает оптимальное решение. как это: -> ampl.eval ( 'вариант решателя ipopt;'); -> ampl.solve () (он не возвращает ничего здесь !!!!) -> solve_result = ampl.getValue ( 'solve_result_num') solve_result = -1, так вот, я просто запустить код снова: -> ampl.solve () Ipopt 3.12.4: ********************************************* ********************************* Эта программа содержит Ipopt, библиотека для крупномасштабной нелинейной оптимизации. Ipopt будет выпущен с открытым исходным кодом под Eclipse Public License (EPL). Для получения дополнительной информации посетите http://projects.coin-or.org/Ipopt ********************************* ********************************************* Это Ipopt версия 3.12 0,4, работает с линейным решателем свинкой. Примечание: Другие линейные решатели могут быть более эффективными (см Ipopt документации). Количество ненулевых равенство ограничений якобиану ...: 4439 Количество ненулевых в неравенстве ограничения якобиевой .: 7888 Количество ненулевых в лагранжевых Гессе .............: 50 Общее количество переменных ... .........................: 1610 переменных с только нижними границами: 0 переменных с нижними и верхними границами: 70 переменных только с верхними пределами: 0 Всего число ограничений равенства .................: 1360 Общее число неравенств ...............: 2585 неравенства ограничения с только нижними границами: 0 неравенств с нижними и верхними границами: 2585 ограничение неравенства только с верхними пределами: 0 ITER объективного inf_pr inf_du Л.Г. (мю) || д || LG (гк) alpha_du alpha_pr Ls 0 5.0001000e + 03 1.31e + 00 8.32e-02 -1,0 0.00e + 00 - 0.00e + 00 0.00e + 00 0 1 5.0079602e + 03 1.31e + 00 2.71e + 01 - 1.0 1.68e + 01 - 1.05e-02 7.73e-04F 1 2 3.9278729e + 03 1.17e + 00 9.17e + 00 -1,0 1.24e + 00 - 3.65e-02 9.32e-02F 1 3 2.7624370e + 03 9,13 е-01 2.49e + 01 -1,0 4.52e-01 - 7.04e-01 1.99e-01F 1 4 1.6350590e + 03 7.87e-02 2.17e + 01 -1,0 6.17e-01 - 2.98e-01 7.82e- 01F 1 5 8.6271513e + 02 3.73e-13 2.34e-01 1.53e -1,0-01 - 9.90e-01 1,00Е + 00f 1 6 1.0292941e + 03 1.98e-13 8.49e-13 -1,0 1. 03E-01 - 1.00E + 00 1.00E + 00f 1 7 1.0259140e + 03 1.86e-13 6.85e-13 -2,5 6.57e-04 - 1.00E + 00 1.00E + 00f 1 8 9.1964915e + 02 2.02e- 13 7.11e-04 1.84e -3,8-02 - 9.96e-01 1,00Е + 00f 1 9 3.5639825e + 02 2.30e-13 4.23e-02 9.45e -5,7-02 - 7.68e-01 1,00Е + 00f 1 ITER цель inf_pr inf_du Л.Г. (мю) || д || LG (гк) alpha_du alpha_pr Ls 10 7.9479322e + 01 2.23e-13 9.26e-03 1.85e -5,7-01 - 8.95e-01 1,00Е + 00f 1 11 1.9247063e + 01 2.72e-13 2.80e-14 - 5.7 1.19e-01 - 1,00Й + 00 1,00Х + 00f-12 6.9889052e + 00 3.55e-13 9.99e-05 4.59e -8,6-02 - 9.33e-01 1,00Е + 00f-13 1.2789711e + 00 4,20 е-13 4.22e-04 2.96e -8,6-01 - 4.85e-01 8.98e-01F-14 2.9354384e-01 2.00e-13 6.84e-06 4.49e -8,6-02 - 9.92e-01 1,00Х + 00f-15 1.0626050e-01 2.41e-13 7.17e-14 9.55e -8,6-03 - 1,00Й + 00 1,00Х + 00h-16 6.3028082e-02 3.77e-13 5. 27e-14 -8,6 1.37e-03 - 1,00Й + 00 1,00Х + 00h-17 4.3933480e-03 3.27e-13 6.90e-08 -11,0 2.32e-03 - 9.99e-01 1,00Х + 00h-18 1,1280540 е-03 2.81e-13 8.08e-14 -11,0 1.02e-04 - 1.00E + 00 1.00E + 00ч 1 19 3.9735544e-04 3.93e-13 5.46e-14 -11,0 5.59e-05 - 1.00E + 00 1,00Е + 00h 1 ITER цель inf_pr inf_du Л.Г. (мю) || д || LG (гк) alpha_du alpha_pr Ls 20 2.2989758e-04 3.19e-13 1.68e-14 -11,0 2.72e-05 - 1.00E + 00 1.00E + 00h 1 Количество итераций ....: 20 (в масштабе) (немасштабированная ) Цель ...............: 2.4678359201693643e-10 2.2989757642660348e-04 двойной неосуществимость ......: нарушение 1.6794654637445761e-14 1.5645490717250029e-08 Constraint ....: 2.7491418973006631e-15 3.1883523599063324e-13 комплементарность .........: 5.3838886983188674e-11 5. 0154994235157414e-05 Общий NLP ошибка .......: 5.3838886983188674e-11 5.0154994235157414e-05 Количество оценок целевой функции = 21 Количество объективных оценок градиента = 21 Число оценок ограничения равенства = 21 Число неравенство ограничений оценок = 21 Количество оценок якобиевого равенства ограничений = 21 Число оценок якобиевого неравенства ограничений = 21 Количество лагранжевых оценок Мешковины = 20 Всего секунды CPU в IPOPT (без функции оценка) = 0.295 Всего SECS CPU в оценках функции NLP = 0,004 EXIT: Оптимальное Так Ipopt 3.12.4: Оптимальное решение найдено суффикс ipopt_zU_out OUT; Суффикс ipopt_zL_out OUT; -> solve_result = ampl.getValue ( 'solve_result_num'
Mahraz
1

голосов
0

ответ
308

Просмотры

Оптимизация .htaccess правила перезаписи файлов

мой файл .htaccess, как следующий, после прочтения многих статей, блоги, веб-сайт. Я разработал его, но я знаю, после того, как все это стало как беспорядок и есть еще сфера дезинфицирующих и совершенство в нем. Пожалуйста, предложите мне, как оптимизировать в наилучшим образом. Этот код главно говорит о 1) Перенаправление правила 2) Содержание политики безопасности 3) Оптимизированная доставки 4) содержание декларации Типы MIME> `ServerSignature Off php_value max_input_vars 40000 php_value suhosin.get.max_vars 40000 php_value suhosin.post.max_vars 40000 suhosin.request строку php_value .max_vars 40000 # ---------------------------------------------- -------------------------------------------------- -------------- # # НАЧАТЬ контролируемые параметры (мт) AddHandler PHP стабильной .php AddHandler fcgid-скрипт. 'Небезопасным-Eval' блоб: данные: www.google-analytics.com https://cartonrent.com; шрифта-Src 'сам' https://fonts.gstatic.com; работник-Src 'самость' www.google.com https://maps.google.com "Header набор X-Content-Security-Policy:" по умолчанию-Src 'я' https: //*.youtube.com; не каркасные предки ни '; Connect-Src 'я'; скрипт-Src 'я' блоб: данные: 'небезопасные-рядный' 'небезопасный-Eval' www.google-analytics.com https://maps.googleapis.com https://maps.gstatic.com; объектно-SRC 'ни'; стиля-Src 'сам' 'небезопасным-рядный' https://fonts.googleapis.com; IMG-Src 'я' https://www.cartonrent.com/images/logo.png 'небезопасным-рядный' 'небезопасным-Eval' блоб: данные: www.google-analytics.com https://cartonrent.com; шрифт-Src 'самость' https: //fonts.gstatic. ком; работник-Src 'самость' www.google.com https://maps.google.com "Header набор X-WebKit-CSP:" по умолчанию-Src 'я' https: //*.youtube.com; не каркасные предки ни '; Connect-Src 'я'; скрипт-Src 'я' блоб: данные: 'небезопасные-рядный' 'небезопасный-Eval' www.google-analytics.com https://maps.googleapis.com https://maps.gstatic.com; объектно-SRC 'ни'; стиля-Src 'сам' 'небезопасным-рядный' https://fonts.googleapis.com; IMG-Src 'я' https://www.cartonrent.com/images/logo.png 'небезопасным-рядный' 'небезопасным-Eval' блоб: данные: www.google-analytics.com https://cartonrent.com; шрифта-Src 'сам' https://fonts.gstatic.com; работник-Src 'самость' www.google.com https://maps.google.com " Заголовок всегда устанавливается X-Разрешенные-Cross-Domain-политик "мастер-только" заголовок всегда установлен Cache-Control "общественность, макс возраста = 31536000, неизменное" #header всегда набор Pragma "не-кэш" заголовок всегда установлен Expires «- 1" Header добавить Cache-Control "общественность" Header незадана набор Last-Modified заголовка X-Content-Type-Options nosniff # ------------------------ -------------------------------------------------- ------------------------------------ # # перепишут ПРАВИЛА RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ index.php [L] RewriteCond% {HTTP_USER_AGENT} Libwww-Perl. * RewriteRule. *? [F,
Sarvesh Sonawane
1

голосов
0

ответ
49

Просмотры

Минимизация пользовательских 3D затрат функции, приведенные образцы - Python 3.5

Начнем с того, что это мой первый пост, я буду стараться быть как можно более конкретным, но я уверен, что больше информации будет необходимо. Не стесняйтесь задавать мне детали, и я буду редактировать этот пост. По вопросу: я определил экономическую функцию, которая принимает в качестве входных переменных 3. Я пытаюсь минимизировать эту функцию затрат на основе этих 3-х переменных в Python 3.5. Проблема требует от меня, чтобы сделать достаточно хорошее начальное приближение (для того, чтобы гарантировать глобальный минимум или, по крайней мере, местные один я заинтересован в), которые у меня есть, но я не уверен, какой метод оптимизации использовать после этого. Есть идеи? заранее спасибо
Nikolaos Paschos
1

голосов
0

ответ
124

Просмотры

Ampl CPLEX QP Hessian не является положительным полуопределенным. Нет основе. ошибка

++ Ошибка, которая появляется, кажется, от нелинейных ограничений в моем файле модели. Я не могу найти конкретную зону конфликта. Прикрепленный ниже файл модели, что у меня есть под рукой. Я попытался удалить «=» от ограничений, а также переменной. Любое понимание было бы весьма признателен! Надеюсь, в комментарии будет способствовать пониманию настройки, но основная программа, чтобы найти оптимальную прибыль производства, отгрузки и продажи расходы на диваны и стулья из разных направлений. #Parameters Param I; #Number растений Param J; #NUMBER продуктов Param K; #NUMBER сырье пары P; #Number Типа оплачиваемых часов паров L; #Number процессов паров М; #Number поставок паров N; #Number городов пары г {к в 1..K, J в 1..J}; #amount сырьевых к требуемому на единицу продукции J пары д {J в 1..J}; #miscellaneous себестоимость производства (в долларах) на единицу продукции я произвела пары г {р} в 1..P; #total типа рабочего времени р (обычный или сверхурочный) доступны в месяц пары т {л в 1..L, J в 1..J, я в 1..i}; #time (в часах) требует процесса л для получения продукта J на ​​заводе I. пары х {р в 1..P}; #salary множитель для регулярного / сверхурочных (р) заплатил часов параметров {ш л в 1..L, я в 1..i}; Стоимость #regular заработной платы (в долларах) в час для процесса л на заводе I. пары с {м 1..m, к в 1..K}; #cost (в долларах) на единицу сырья к поставщику м парам ч {м 1..m, я в 1..i}; #cost (в долларах) на единицу сырья, поставляемого из поставщиков м посадить I. Цена пар {J в 1..J, п в 1..N}; #selling цены (в долларах) в расчет на единицу продукции J в городе п. пары низкого {J в 1..J, п в 1..N}; #minimum спрос (в количестве единиц) продукт J в городе п пары J {J в 1..i, п в 1..N}; #maximum спрос (в количестве единиц) продукт в городе J п пары с {j в 1..J, я в 1..i, п в 1..N}; #shipping стоимость (в долларах) для J продукта, поставляемого из завода я в городе п. пары D {м 1..m, к в 1..K}; #maximum количество сырья к доступным от поставщика м в месяц. Переменные #Decision переменная х {я в 1..i, J в 1..J, п в 1..N}> = 0; #number единиц продукции J производства обычных часов, погруженных от завода я до города п. и Неотрицательность вар у {я в 1..i, J в 1..J, п в 1..N}> = 0; #number единиц продукции J производимой сверхурочные часы, погруженных от завода я до города п. и Неотрицательность вар д {м 1..m, к в 1..K}> = 0; # Требование сырья к требуется от поставщика м. и доход Неотрицательность переменная = сумма {я в 1..i, J в 1..J, п в 1..N} (х [я, у, п] * у [I, J, N]) * Цена [J, п]; #total доход от продажи продукции. вар rawMatCost = сумма {м 1..m, к в 1..K} d [т, к] * с [т, к]; #total затраты на приобретение сырья. вар rawMatShipCost = сумма {м 1..m, к в 1..K, я в 1..i} d [т, к] * ч [м, я]; #total стоимость перевозки сырья уаг salCost = сумма {я в 1..i, J в 1..J, л в 1..L, п в 1..N} (х [I, J, N] * е [1] + у [I, J, п] * е [2]) * (т [л, J, I] * W [L, I]); #total зарплата выплачивается. вар prodShipCost = сумма {я в 1..i, J в 1..J, п в 1..N} (х [I, J, N] + Y [I, J, N]) * S [J, в]; #total стоимость доставки продуктов вар miscCost = сумма {я в 1..i, J в 1..J, п в 1..N} (х [I, J, п] + у [I, J, N] ) * д [J]; #total разные расходы. #Objective функции максимизации MonthProfit: (доход-rawMatCost-rawMatShipCost-salCost-prodShipCost-miscCost); Заголовок #Total Ежемесячная прибыль к RawConsumed1 {k} в 1..K: сумма {я в 1..i, J в 1..J, п в 1..N} (х [I, J, N] + у [I, J, N]) * г [K, J]> = Сумма {м} 1..m д [M, K]; #Raw Материал Потребляемый RawConsumed2 {k} в 1..K: сумму {я в 1..i, J в 1..J, п в 1..N} (х [I, J, N] + Y [I , J, N]) * г [K, J]
TJYen
1

голосов
0

ответ
52

Просмотры

optimise python regex search

Код Защиты поиск (самоощущение, arg1, arg2): глобальный ipv4_regex, type_regex если isinstance (арг2, type_regex): Текст = re.search (арг2, arg1), если текст: р = text.group () возвращает LEN (р) еще: вернуться 0 еще: если арг2 в arg1: возвращение LEN (arg2) еще: возвращение 0 у меня есть питон скрипт, где, чтобы служить один запрос, эта функция получает пересчитана около 452900 раз (найти это значение, выполнив профилирование кода с использованием pprofile), чтобы дать выход. Некоторые замечания по поводу функции: arg1 = строка арг2 = -й строка / регулярного выражения в основном, арг2 является экземпляром г-й длинного списка регулярных выражений / строк, которые должны быть сопоставлено с arg1 (arg1 остается постоянная в течение одного запроса) Симметричный найти соответствующую длину. Я придумал эту функцию, но время и Потребление ЦП становится узким местом для меня. Из-за многие поисковые операции, CPU идет очень высоко в ближайшее время. Какие идеи я думал, что до сих пор использовать словарь понимание вместо если-иначе, как предложено здесь использовать какой-то основе дерева поиска, как мы делаем для строк. обе эти идеи простые идеи, как сейчас, я не могу привести их в действие. У меня нет никакого контроля над регулярными выражениями в arg2, поэтому оптимизация регулярных выражений не помогла бы здесь. Пожалуйста, предложите, я ищу идеи относительно того, как я могу оптимизировать эту функцию? Спасибо У меня нет никакого контроля над регулярными выражениями в arg2, поэтому оптимизация регулярных выражений не помогла бы здесь. Пожалуйста, предложите, я ищу идеи относительно того, как я могу оптимизировать эту функцию? Спасибо У меня нет никакого контроля над регулярными выражениями в arg2, поэтому оптимизация регулярных выражений не помогла бы здесь. Пожалуйста, предложите, я ищу идеи относительно того, как я могу оптимизировать эту функцию? Спасибо
Guru
1

голосов
1

ответ
52

Просмотры

Как оптимизировать свой веб-сайт лучше? (PageSpeed ​​Insights)

Я пытаюсь оптимизировать свой веб-сайт в соответствии с рекомендациями PageSpeed ​​Insights. Ссылка на мой сайт Эвант. Есть две рекомендации, которые я проблемы с; первый заключается в устранении рендер блокировки CSS. Я пытался сделать некоторые из них поджать, но оказывается, что CSS не загружается должным образом, когда я это делаю, так что я решил оставить их все нагрузки синхронно. Вторая вещь о кэшировании браузера. Я попробовал все, что я видел в Интернете, как добавить файл .htaccess, который я позже записать, но ни один из них не работал. Структура каталога файла: файл .htaccess: # Включить истечения срока действия ExpiresActive на # По умолчанию директивы ExpiresDefault «доступ плюс 1 месяц» / х-значок # Моего Favicon ExpiresByType изображение «доступ плюс 1 года» # Изображения ExpiresByType изображения / GIF «доступ плюс 1 месяц "
esdoodle
1

голосов
0

ответ
170

Просмотры

Настройка линейного оптимизатора с «или» ограничения

У меня есть большой линейный оптимизатор я бегу и нужна помощь в настройке ограничения, чтобы получить то, что я хочу. Это трудно для меня, чтобы выразить это слова именно (отсюда расплывчатое после названия), поэтому я написал пример, детали: Выбрать в общей сложности 5 пунктов, максимальное значение и сохранение стоимости под 5k. Каждый элемент имеет 2 «типов». Они либо помечены типа1 = А, В, С, D или Е, и либо TYPE2 = Х или Y. 4 детали должны быть типа Х, 1 должен быть тип Y Ниже пример прекрасно работает, но я хочу добавить еще два ограничения и я не совсем уверены, как это сделать. Два других ограничений: Я хочу, чтобы каждый оптимизации, чтобы иметь по крайней мере 2 экземпляра type1. Меня не волнует, какой тип есть кратна или если два различных типа кратные (например, 2 A-х и 2-х С), поэтому я думаю об этом как «или» Ограничение (А> 2 ИЛИ В> 2 ИЛИ ...). Это даже выполнимо? Это один может быть немного сложнее: «тип Y» Какой бы ни был выбран, я не хочу, чтобы типа1 показать снова. Так говорят, что элемент Y является типа1 = C, я хочу, чтобы каждый другой выбранный товар, чтобы не быть C. Я полагаю, мне нужно добавить еще одну фиктивную матрицу взаимодействующего type1 и type2 Пример желаемого результата: идентификатор значение type1 type2 стоить 10 10 BX 19 865 11 11 CY 19 1097 18 18 DX 19 1005 40 40 20 ВХ 956 45 45 AX 20 980 РАБОЧИЙ ПРИМЕР: библиотека (lpSolve) библиотека (dplyr) # установка DF ID
1

голосов
0

ответ
232

Просмотры

Как создать пользовательские графики для DASK dataframes?

Я пытаюсь paralelize некоторые операции, которые будут сделаны на DASK Dataframe, но я не совсем понимая, что лучший способ сделать это. Например, я читаю DASK dataframe от паркета и я хочу, чтобы добавить одну единицу к первому столбцу один и два на второй колонке: импорт dask.dataframe, как дд DDF = dd.read_parquet ( «dataframe») DDF [ 'а'] = DDF [ 'а'] + 1 DDF [ 'B'] = DDF [ 'B'] + 2 ddf.visualize () Здесь есть график этого вычисления. (The dataframe была создана с 2-мя перегородками). Как видно, эти две операции выполняются один за другим, где мы знаем, что они могут выполняться параллельно (по крайней мере, его части), потому что они добавляют некоторую ценность для разных столбцов. Таким образом, я пытался paralelize этих операций с использованием запаздывающих функций вместо: от Даска импорта отсроченной импорты DASK. dataframe, как дд @delayed четкости приращение (DF, X, Val): печать ( 'Тип:', тип (DF)) DF [х] = D [X] + вали возврат ф.р. @delayed Защита перезапись (df1, df2, седловина ): df1 [Col] = df2 [Col] возвращение df1 DDF = dd.read_parquet ( 'dataframe') OP1 = приращение (DDF [[ 'а']], 'а', 1) OP2 = приращение (DDF [[» б ']], 'B', 2) op3 = перезапись (DDF, OP1, 'а') OP4 = перезапись (op3, OP2, 'б') op4.visualize () Здесь есть график этого вычисления и, как можно увидеть, какая-то часть работы делается параллельно. Конечно, эти операции очень просты, и это излишество, но это просто, чтобы продемонстрировать точку. Тем не менее, я печать типа входного dataframe внутри функции приращения и, к моему удивлению, когда я бегу op4.compute (), то тип pandas.core.frame. DataFrame в то время как я ожидал, что это будет dask.dataframe.core.DataFrame. Тогда я решил отложить чтение паркетной файла: @delayed четкости чтения (имя): возвращение dd.read_parquet (имя) DDF = чтение ( '') dataframe OP1 = приращение (DDF [[ 'а']], 'а', 1) OP2 = приращение (DDF [[ 'B']], 'B', 2) op3 = перезапись (DDF, OP1, 'а') OP4 = перезапись (op3, OP2, 'б') op4.visualize () на графике видно, что рабочие места ведутся параллельно и когда я бегу op4.compute () тип входного dataframe в приращению функции dask.dataframe.core.DataFrame, что я ожидал. Тем не менее, тип OP4 является dask.delayed.Delayed, что означает, что, когда я вычислить его я получаю dask.dataframe.core.DataFrame и так, чтобы получить окончательный dataframe, необходимо применять Compute два раза: op4.compute (). вычислить () Индекс AB 0 2 3 1 2 3 2 2 3 3 2 3 4 2 3 5 2 3 6 2 3 7 2 3 8 2 3 9 2 3 Мы также создали график в ручном способе (с использованием словаря), как приведены в документации. Мы хотели бы, однако, чтобы понять, если задержанный вариант, показанный выше, лучший подход для решения этой ситуации. Интернет документация, кажется, показывают только отложенное подход, используемый вместе со списками значений и не dataframes. Заключительный, что это лучший способ paralelize рабочих мест для DASK dataframes? чтобы понять, если задержанный вариант, показанный выше, лучший подход для решения этой ситуации. Интернет документация, кажется, показывают только отложенное подход, используемый вместе со списками значений и не dataframes. Заключительный, что это лучший способ paralelize рабочих мест для DASK dataframes? чтобы понять, если задержанный вариант, показанный выше, лучший подход для решения этой ситуации. Интернет документация, кажется, показывают только отложенное подход, используемый вместе со списками значений и не dataframes. Заключительный, что это лучший способ paralelize рабочих мест для DASK dataframes?
Henrique Silva
1

голосов
0

ответ
73

Просмотры

Интеграция и ложная сходимость оптимизации в R

Я пытаюсь найти ОМП трех положительных параметров а, мю и тета, а затем значение функции, говоря f1. f1
C.C.

Просмотр дополнительных вопросов